前面几更介绍了基本知识,列表以及元组,这一更介绍一种新的序列——字符串
目录
- 字符串基本操作
- 设置字符串格式
- 字符串方法
3.1 字符串基本操作
第二章我们说过所有标准序列操作都适用于字符串,但是字符串不可变,所以所有元素赋值和切片赋值都是非法的
>>>wed = 'www.python.org'
>>>wed[-3:] = 'com'
Traceback (most recent call last):
File"<pyshell#19>",line 1,in ?
web[-3:] = 'com'
TypeError:object doesn't support slice assignment
注意:光理论是不够的,在此送大家一套2020最新Python全栈实战视频教程,点击此处
进来获取 跟着练习下,希望大家一起进步哦!
3.2 设置字符串的格式
3.2.1 替换字段名
这里只需使用format方法即可。代码上见操作
>>>"{} {} {} {}".format(1,2,3,4)
'1 2 3 4'
>>>"{0} {3} {1} {2}".format(1,2,3,4)
'1 4 2 3'
如果我们不注明编号,format会自行编号。但是如果我们像后者一样人为编号,format也会自行将对应哪个编号的值填入。当然也可以使用参数进行编号:
>>>"{a} {b} {1} {0}".format(6,4,a=9,b=5)
'9 5 4 6'
可以像这样既有参数又有人工编号,但是不建议这个样子使用。个人觉得这样比较混乱,代码难以理解。
3.2.2 基本转换
指定要在字段中包含的后,就可以添加有关如何设置其格式的指令了。首先,可以提供一个转换标志
>>>print("{pi!s} {pi!r} {pi!a}".format(pi = 'π'))
π 'π' '\u03c0'
上述三个标志(s,r和a)分别指str,repr和ascii进行转换。
当你想提供一个数让python当作小数时,可以在格式说明使用字符f(表示定点数)
>>>"the number is {num}".format(num = 42)
'the number is 42'
>>>"the number is {num:f}".format(num = 42)
'the number is 42.000000'
你也可以将其处理为二进制数:
>>>"the number is {num:b}".format(num = 42)
'the number is 101010'
这样的类型符很多很多:
3.2.3 宽度、精度和千位分割
设置浮点数,或其他更具体的小数类型的格式时,默认在小数点后面显示六位小数,并根据需要设置字段的宽度,而不进行任何形式的填充,当然,这种默认设置可能不是你想要的,在这种情况下,可根据需要的格式说说明中指定宽度和精度.
宽度是使用整数指定的,如下图所示
>>>"{num : 10}".format(num = 3)
' 3'
>>>"{name : 10}".format(name = "Bob")
'Bob '
如你所见,束河字符串的对齐方式不相同,对齐将在下一节介绍。
精度,也是使用整数指定的,但需要在她前面加上一个表示小数点的句点
"pi day is {pi:.2f}".format(pi=pi)
'pi day is 3.14'
这里显式的指定了类型F,因为默认的精度处理方式稍有不同。
当然,可以同时指定宽度和精度:
>>>"{pi:10.2f}".format(pi=pi)
' 3.14'
最后,可以使用逗号来指出你要添加千位分隔符
>>>'one googol is {:,}'.format(10**100)
'one googol is 10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000'
3.2.4 符号,对齐和用零补充
有很多用于设置数字格式的机制,比如便于打印整齐的表格,在大多数情况下,只需指定宽度和精度,但包含负数后,原本漂亮的输出,可能不再漂亮,另外,正如你看到的字符串和数字的默认对齐方式不同,在同意栏中,同时包含字符串和数字时,你可能想修改默认对齐方式,在指定宽度和精度的数前面可叠加一个标志,这个标志可以是零,加号,减号或空格,其中零表示,用零来填充数字
>>>'{:010.2f}'.format(pi)
'0000003.14'
要指定左对齐,右对齐和居中可使用<、>和^
>>>print('{0:<10.2f}\n{0:^10.2f}\n{0:>10.2f}').format(pi)
3.14
3.14
3.14
还有更具体的说明符=,他指定将填充字符放在符号与数字之间
>>>print('{0:10.2f}\n{1:10.2f}').format(pi,-pi))
3.14
-3.14
>>>print('{0:10.2f}\n{1:=10.2f}').format(pi,-pi))#注意我加的等号
3.14
- 3.14
如果要给正数,加上符号,可使用说明服务正好,而不是默认的减,如果将符号说明服指定为空格,会在正数前面加上空格,而不是加号
>>>print('{0:-.2f}\n{1:-.2f}').format(pi,-pi))#默认设置
3.1
-3.1
>>>print('{0:+.2f}\n{1:+.2f}').format(pi,-pi))
+3.1
-3.1
>>>print('{0: .2f}\n{1: .2f}').format(pi,-pi))
3.1
-3.1
3.3 字符串方法
3.3.1 center
方法center通过在两边添加字符(默认为空格)来字符串居中
>>>"the middle by jimmy eat world ".center(39)
' the middle by jimmy eat world '
#但是也可以不用空格来填充
>>>"the middle by jimmy eat world".center(39,"*")
'*****the middle by jimmy eat world*****'
3.3.2 find
方法find在字符串中查找子串。如果找到,就返回子串第一个字符的索引,否则返回-1.
>>>"with a moo-moo here, and a moo-moo there".find(moo)
7
>>>title = "monty python's flying cirus"
>>>title.find('monty')
0
>>>title.find('flying')
15
>>>title.find('sun')
-1
3.3.3 join
join是一个非常重要的字符串方法,作用和split相反,用于合并序列的元素。
>>>seq = [1,2,3,4,5]
>>>seq = '+'
>>>seq.join(seq)#尝试合并一个数字列表
这里会发生报错,报错信息就不写了
TypeError:sequence item 0:expected string, int found
>>>seq = ['1','2','3','4','5']
>>>seq.join(seq)#合并一个字符串列表
'1+2+3+4+5'
>>>dirs = '','usr','bin','env'
>>>'/'.join(dirs)
'/usr/bin/env'#这是unix约定格式,又想了解可以私聊我。一起交流unix和dos/windoows约定格式
3.3.4 lower
方法lower返回字符串的小写版本。
>>>'Trouble Like This'.lower()
'trouble like this'
3.3.5 replace
方法replace将指定字串都替换为另一个字符串,并返回替换后结果
>>>'This is a test'.reolace('is','eez')
'Theez is a test'
如果你使用过字处理程序中“查找与替换”功能,一定知道replace有多好用
3.3.6 split
split是一个非常重要的字符串方法,其作用与join相反,用于将字符串拆分成序列
>>>'1+2+3+4+5'.split()
['1','2','3','4','5']
>>>'/usr/bin/env'.split('/')
['','usr','bin','env']
3.3.7 strip
方法strip将字符串开头和末尾的空白删除,并返回删除后的结果。
>>>' i like sunshine23 '
'i like sunshine23'
与lower一样,需要将输入与存储的值进行比较时,strip很有用。回到前面介绍lower使用的用户名示例,并假定用户输入用户名时候不小心在末尾多加了空格
>>>names = ['sun','shine','23']
>>>name = 'sun '
>>>if name in names:print('find it')
...
>>>if name.strip() in names:print('find it')
...
find it
3.3.8 translate
方法translate与replace 一样嫩南瓜替换字符串的特定内容,但不同的是,它只能进行单字符替换,这个方法的优势在时替换多个字符,因此效率比replace高,这个方法的用途也很多,如替换换行符或其他随平台而已的特殊字符,但这里只介绍一个比较简单的事例,假如你要将一段英文文本转换为带有德国口音的版本,为此,必须将字符c和s分别替换k和z
>>>table = str.maketrans('cs','kz')
>>>table
{115:122,99:107}
这样你只能看到unicode码点映射,创建转换表时,就可以将其用作方法translate的参数。
>>>'this is an incredible test'.translate(table)
'thiz iz an inkredible tezt'
调用方法maketrans时,还可以提供可选的第三个参数,指定将哪些字母删除。例如删除字间空格
>>>table = str.maketrans('cs','kz',' ')
>>>'this is an incredible test'.translate(table)
'thizizaninkredibletezt'
小结
注意:光理论是不够的,在此送大家一套2020最新Python全栈实战视频教程,点击此处
进来获取 跟着练习下,希望大家一起进步哦!
本章介绍了字符串的两个重要方面:
1.字符串格式设置
2.字符串方法
预告
下一更带来字典!!!点击此处进入下一更