Skip to content

字符串

字符串基本操作

所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用。但是字符串是不可变的,因此对字符串进行分片赋值等操作是不合法的。

字符串格式化

1
2
>>>'%s plus %s equals %s' % (1,1,2)
'1 plus 1 equals 2'

基本转换说明

  • %字符:标记转换说明符的开始。

  • 转换标志(可选):-表示左对齐;+表示在转换值之前要加上正负号;""(空白字符)表示正数之前保留空格;0表示转换值若位数不够则用0填充。

  • 最小字段宽度(可选):转换后的字符串至少应该具有该值指定的宽度。如果是*,则宽度会从值元组中读出。

  • .后跟精度值(可选):如果转换的是实数,精度值就表示出现在小数点后的位数。如果转换的是字符串,那么该数字就表示最大字段宽度。如果是*,那么精度将会从元组中读出。

    1
    2
    3
    >>> from math import pi
    >>> "Pi with three decimals: %.3f" % pi'
    Pi with three decimals: 3.142'  
    

  • 转换类型:参见下表

转换类型 含义
d,i 带符号的十进制整数
o 不带符号的八进制
u 不带符号的八进制
x 不带符号的十六进制(小写)
X 不带符号的十六进制(大写)
e 科学计数法表示的浮点数(小写)
E 科学计数法表示的浮点数(大写)
f,F 十进制浮点数
g 如果指数大于-4或者小于精度值则和e相同,其他情况与f相同
G 如果指数大于-4或者小于精度值则和E相同,其他情况与F相同
C 单字符(接受整数或者单字符字符串)
r 字符串(使用repr转换任意Python对象)
s 字符串(使用str转换任意Python对象)

字符串方法

find

在较长的字符串中查找子串,它返回子串所在位置的最左端索引,如果没有找到则返回-1

join

它是split方法的逆方法,用来连接序列中的元素

1
2
3
4
5
6
>>> separator='+'
>>> seq=[1,2,3,4,5]
>>> separator.join(seq)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
1
2
3
4
>>> separator='+'
>>> seq=['1','2','3','4','5']
>>> separator.join(seq)
'1+2+3+4+5'

可以看到,需要被连接的序列元素都必须是字符串。

lower

返回字符串的小写字母版

1
2
>>> 'THANK YOU'.lower()
'thank you'

replace

返回某字符串的所有匹配项均被替换之后得到的字符串

1
2
>>> 'This is a test'.replace('is','eez')
'Theez eez a test'

split

它是join的逆方法,用来将字符串分割成序列

1
2
>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env']

strip

返回去除两侧(不包括内部)空格的字符串:

它和lower方法一起使用的话就可以很方便的对比输入和存储的值。假设用户在输入名字时无意中在名字后面加上了空格:

1
2
3
4
5
6
7
>>> names=['gumby','smith','jones']
>>> name='Gumby '
>>> if name in names:print 'Found it!'
...
>>> if name.strip().lower() in names:print 'Found it!'
...
Found it!

也可以指定需要去除的字符:str.strip('需要去除的字符')

translate

和replace方法一样,可以替换字符串中的某些部分,但是和前者不通的是,translate方法只处理单个字符。它的优势在于可以同时进行多个替换,有些时候比replace效率高得多。