听说你也要自学python,看这儿就够了(四)

前面几更介绍了基本知识,列表以及元组,这一更介绍一种新的序列——字符串

目录

  1. 字符串基本操作
  2. 设置字符串格式
  3. 字符串方法

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

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'

小结

本章介绍了字符串的两个重要方面:
1.字符串格式设置
2.字符串方法

预告

下一更带来字典!!!

发布了14 篇原创文章 · 获赞 26 · 访问量 4130

猜你喜欢

转载自blog.csdn.net/m0_46976252/article/details/105614205
今日推荐