2018-08-22 Day3-字符串

1.数据存储形式

计算机以二进制的形式存储

(1).原码:数据的二进制形式

10 --> 1010 原码:00001010
-10 --> 原码:10001010

(2).反码

  • 正数的反码:反码和原码一样
  • 负数的反码:符号位不变,后面每一位取反
    10 --> 反码:00001010
    -10 --> 反码:11110101

(3).补码

  • 正数的补码:补码和原码一样
  • 负数的补码:符号位不变,后面每一位取反再加1(反码+1)

2.认识字符串

  • 用单引号或者双引号括起来的字符集就是字符串
  • 字符串中的每个独立的单元就叫字符

3.转义字符

  • 通过 \ 将一些特殊的字符转换成一个具有特殊功能或特殊意义的字符,就是转义字符。
  • 常见的转义字符
    \n --- 换行
    \t --- 制表符(tab)
    \' --- '

(1).需要显示转义字符,在前面加 \ 即可。
\\ --- \
计算字符串长度的时候,转义字符的长度是1

/n    /t   //  

(2).如果需要同时转义多个字符,可以在字符串前面加 r 即可。

a = r'abcd\nsde\t'
print(a)

abcd\nsde\t     #a

(3).python中字符的编码采用的是Unicode编码
A.Unicode编码包括了ASCII码。
B.Unicode是采用两个字节对一个字符进行编码(2^15),将世界上所有符号进行编码。

  • 将字符转换成指定的数值,这个过程就是编码(目的是方便计算机存储)
  • 将数值转换成对应的符号的过程及时反编码(解码)

Unicode和字符的转换
1).将Unicode码转换成字符:chr(编码)--

print(chr(0xAC00))
print(chr(0x4e60))

가
习

2)将字符转换成Unicode编码:ord(字符)

code1 = ord('星')
code2 = ord('辰')
print(hex(code1), hex(code2))

0x661f 0x8fb0

4.获取字符

  • 字符串实质可以是一个不可变的序列,序列内容是字符。
  • 一旦字符串确定,那么里面的字符和字符的位置就不可变了,例如‘abc’

A. 怎么获取单个字符
python中的字符串,可以通过下标(索引)来获取指定位置上的字符:字符串[索引]
说明:
a.字符串:可以是字符串值,也可以是字符串变量

b. []:中括号是固定语法

c.索引:从0开始到字符串长度减1(0对应第一个字符);-1~-长度(-1对应最后一个字符)

注意:索引不能越界,否则越界!(产生异常)

str1 = 'abc'    #a->0 , b->1 , c->2
print(str1[2])

c

B.获取部分字符串(获取子串) -- 切片

注意:
步进如果是正数,那么下标1对应的位置必须在下标2的前面;如果步进为负数,那么下标1对应的位置必须在下标2的后面

下标2对应的字符是取不到的

  • 字符串[下标1:下标2] :

说明:从下标1开始,获取到下标2前的所有字符

str2 = 'hello world'
print(str2[0:4])
print(str2[-4:-1])

hell
orl
  • 字符串[下标1:下标2:步进]

说明:从下标1开始获取,每次下标值增加步进值,每增加一次取一次,直到取到下标2为止。

str2 = 'hello world'
print(str2[0:8:2])

hlow
[Finished in 0.3s]
  • 切片的时候,下标1和下标2是可以省略

    • 下标1省略:默认从开始的位置开始获取(可能是第一个字符,也可能是最后一个开始,取决于步进)

    • 下标2省略:从下标1开始获取(同上)

    效果如下:

    str2 = 'hello world'
    print(str2[:8:1])
    print(str2[:8:-1])
    print(str2[1::1])
    print(str2[1::-1])
    
    hello wo
    dl
    ello world
    eh
    [Finished in 0.3s]
    
    • 下标1和下标2都省略
    str = 'hello world and python'
    print(str[::2])      #打印所有奇数位
    
    hlowrdadpto
    [Finished in 0.3s]
    

5.字符串运算

1.加法运算
python支持两个字符串相加,效果就是将两个字符串拼接在一起产生一个新的字符串

print('abc'+'123')

abc123
[Finished in 0.3s]

注意:“+”号的两边必须是同一类型

2.乘法运算
格式:字符串*整数

print('abc' * 3)

abcabcabc
[Finished in 0.2s]

3.支持所有的比较运算符

str1 = 'abc'
print('abc' == str1)
print('abcd' > 'ac')  
#每一位依次比较其 Unicode码值大小

True
False
[Finished in 0.3s]

4.in 和 not in
'a' in 'abd' : 判断 'a' 是否在 'abd' 中
判断结果为布尔值

5.获取字符串长度
字符串长度 = 字符串个数
使用 len() 内置函数

str3 = 'project'
print(len(str3))

7

补充:空串

str = ''    #长度是0

6.阻止转义
在字符串的最前面添加 r/R 可以阻止转义

print(r'a\nb')

a\nb

7.python为字符串提供了很多的內建函数

格式: 字符串.函数()

这些所有函数的功能都不会影响原来的字符串,而是产生一个新的字符串

A.capitalize():将字符串第一个字符转换成大写

str1 = 'hello world'
print(str1.capitalize())

Hello world
[Finished in 0.2s]

B.center(width, fillchar) : 让字符串居中(width 宽度 , fillchar 填充的字符)

print('abc'.center(10,'*'))

***abc****

C.rjust(width , fillchar) : 让字符串局右(width 宽度 , fillchar 填充的字符)

number = '1'
new_id = number.rjust(3,'0')
print(new_id)

001
[Finished in 0.2s]

同理 ljust(width,fillchar)左对齐

D. str.count(sub, start= 0,end=len(string))
统计次数(sub是搜索的子字符串,start和end分别是开始和结束位置)

print('adgfdsaaa' .count('a'))

4

E.str1.join(str2)
在str2中的每个字符串之间插入一个str1

print('+'.join('abc'))

a+b+c

F. str1.replace(old, new,num)
将str1中的old全部替换成new(num表示替换前几个)

new_str = 'abcdfdwdadfswqaqd'.replace('a','+')
print(new_str)

+bcdfdwd+dfswq+qd

6.字符串的格式化

语法:'格式符' %(格式符对应的值)

  • 常见格式化字符:

    • 格式化字符串 ---> %s
    • 格式化数字 ---> %d
    • 格式化浮点数 ---> %f
    • 格式化字符 ---> %c (一般用于ascii码或者Unicode码)
first_name = '星'
last_name = '辰'
age = 18
newstr = 'hello,%s%s!今年%d岁' %(first_name,last_name,age)
print(newstr)

hello,星辰!今年18岁
[Finished in 0.5s]

%n.mf :m表示显示的最小总宽度,n表示小数点位数

a = 3434.12345
print('%8.4f'%a)

3434.1235
[Finished in 0.6s]

附:


格式化.png

7.数据类型转换

1.数据类型的自动转换

a = 10   #整型 
b = 12.5   #浮点型
result = a+ b  #浮点型--会自动转换整型为浮点型 

2.强制转换
基本语法:类型名(数据)

  • 其他类型 ---> 整型
    int(12.5)---> 12
    去掉字符串的引号后,字符串的本身就是整数,才能转换成整型
    int('123') ---> 123
    int ( '123a')
    int ('123.5')

  • 其他类型 ---> 浮点型
    float(True) ---> 1.0
    去掉字符串的引号后,字符串的本身就是浮点数,才能转换成浮点型
    float('2e3') ---> 2000.0

  • 其他类型 ---> 布尔型
    所有数据类型的数据都可以转换成布尔
    (1).数字中:除了0都是True
    bool(100) ---> True
    bool(-12.5) ---> True
    bool (0) ---> False
    (2).字符串中除了空串都是True
    bool ('False') ---> True
    bool ('') ---> False
    bool (None) ---> False

  • 其他类型 ---> 字符串
    所有数据都可以转换成字符串
    str(100) ---> '100'
    str(True) ---> 'True'

8.字符串相关方法

python的字符串内建函数

name.split(',')
按照逗号分割(不写默认按照空格分割)

string.capitalize()
把字符串的第一个字符大写

string.center(width)
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

string.count(str, beg=0, end=len(string))
返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数

string.decode(encoding='UTF-8', errors='strict')
以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 'ignore' 或 者'replace'

string.encode(encoding='UTF-8', errors='strict')
以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'

string.endswith(obj, beg=0, end=len(string))
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.

string.expandtabs(tabsize=8)
字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。

string.find(str, beg=0, end=len(string))
检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

string.format()
格式化字符串

string.index(str, beg=0, end=len(string))
跟find()方法一样,只不过如果str不在 string中会报一个异常.

string.isalnum()
如果 string 至少有一个字符并且所有字符都是字母或数字则返
回 True,否则返回 False

string.isalpha()
如果 string 至少有一个字符并且所有字符都是字母则返回 True,
否则返回 False

string.isdecimal()
如果 string 只包含十进制数字则返回 True 否则返回 False.

string.isdigit()
如果 string 只包含数字则返回 True 否则返回 False.

string.islower()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

string.isnumeric()
如果 string 中只包含数字字符,则返回 True,否则返回 False

string.isspace()
如果 string 中只包含空格,则返回 True,否则返回 False.

string.istitle()
如果 string 是标题化的(见 title())则返回 True,否则返回 False

string.isupper()
如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

string.join(seq)
以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串

string.ljust(width)
返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串

string.lower()
转换 string 中所有大写字符为小写.

string.lstrip()
截掉 string 左边的空格

string.maketrans(intab, outtab)
maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

max(str)
返回字符串 str 中最大的字母。

min(str)
返回字符串 str 中最小的字母。

string.partition(str)
有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.

string.replace(str1, str2, num=string.count(str1))
把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.

string.rfind(str, beg=0,end=len(string) )
类似于 find()函数,不过是从右边开始查找.

string.rindex( str, beg=0,end=len(string))
类似于 index(),不过是从右边开始.

string.rjust(width)
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

string.rpartition(str)
类似于 partition()函数,不过是从右边开始查找.

string.rstrip()
删除 string 字符串末尾的空格.

string.split(str="", num=string.count(str))
以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串

string.splitlines([keepends])
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

string.startswith(obj, beg=0,end=len(string))
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.

string.strip([obj])

在 string 上执行 lstrip()和 rstrip()
string.swapcase()

翻转 string 中的大小写
string.title()
返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

string.translate(str, del="")
根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中

string.upper()
转换 string 中的小写字母为大写

string.zfill(width)
返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

string.isdecimal()
isdecimal()方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容