第3章 使用字符串

1. 基本字符串操作

字符串是不可变的,如下所示的项或分片赋值都是不合法的.

2. 字符串格式化 : 精简版

字符串格式化使用字符串格式化操作符即百分号%来实现的.

注意
%也可以用来做模运算(求余)操作符.

%的左侧位置放置一个字符串(格式化字符串),而右侧则放置希望被格式化的值.可以使用一个值,如一个字符串或者数字,也可以使用多个值的元组或者字典.

格式化字符串的%s部分被称为转换说明符,它们标记了需要插入转换值的位置.s表示植会被格式化为字符串->如果不是字符串,则会用str将其转换为字符串.

3. 字符串方法

字符串从string模块中”继承”了很多方法.

3.1 find

find方法可以在一个较长的字符串中查找子串.它返回子串所在位置的最左端索引.如果没有找到返回-1.

1
2
3
4
5
6
>>> 'hello,my name is kevin'.find('kevin')
17
>>> title = "I love China."
>>> title.find(love)
>>> title.find('love')
2

这个方法还可以接收可选的起始点和结束点参数.

1
2
3
4
5
6
>>> subject = '$$$ Get rich now!!! $$$'
>>> subject.find('$$$',1)
20
>>> subject.find('!!',0,16) #操作起始点和终止点
-1
>>>

3.2 join

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

1
2
3
4
5
>>> seq=['1','2','3']
>>> sep = '+'
>>> sep.join(seq)
'1+2+3'
>>>

3.3 lower

lower方法返回字符串的小写字母版本,这个方法会忽略字母的小写状态.

1
2
3
>>> 'HELLO'.lower()
'hello'
>>>

如果想要在列表中查找一个用户名是否存在 : 列表包含字符串”kevin”,而用户输入的是”Kevin”,就能找到了.解决方法就是在存储和搜索时把所有名字都转换为小写.

1
2
3
4
5
6
>>> name = "Kevin"
>>> names = ['kevin','leona']
>>> if name.lower() in names: print 'Found it!'
Found it!
>>>

标题转换
和lower方法相关的是title方法,它会将字符串转换为标题(也就是所有的单词的首字母大写,而其他字母小写.)

3.4 replace

replace方法返回某字符串的所有匹配项均被替换之后的字符串,应用于文档的查找和替换.

1
2
3
>>> 'This is a apple'.replace('is a apple','are some apples')
'This are some apples'
>>>

3.5 split

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

1
2
3
4
5
>>> '1+2+3+4+5+6'.split('+')
['1', '2', '3', '4', '5', '6']
>>> 'hello hello'.split()
['hello', 'hello']
>>>

3.6 strip

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

1
2
3
>>> ' I say!'.strip()
'I say!'
>>>

它和lower方法一起使用可以很方便的对比输入和存储的值.

3.7 translate

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

在使用translate转换之前,需要一张转换表,因为这个表太大.我们使用string模板里面的maketrans函数就可.

4. 小结

  • 字符串格式 : 求模操作符(%)可以用来将其他值转换为包含转换标志的字符串,例如%s.它还能用来对值进行不同方式的格式化,包括左右对齐,设定字段宽度以及精度值.增加符号(正负号)或者左填充数字0等.