字符串
字符串基本操作¶
所有标准的序列操作(索引、分片、乘法、判断成员资格、求长度、取最小值和最大值)对字符串同样适用。但是字符串是不可变的,因此对字符串进行分片赋值等操作是不合法的。
字符串格式化¶
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效率高得多。