1、使用[start🔚step]分片
分片操作(slice)可以从一个字符串中抽取子字符串(字符串的一部分)。我们使用一对方括号、起始偏移量 start、终止偏移量 end 以及可选的步长 step 来定义一个分片。其中一些可以省略。分片得到的子串包含从 start 开始到 end 之前的全部字符。
• [:] 提取从开头到结尾的整个字符串
• [start:] 从 start 提取到结尾
• [:end] 从开头提取到 end - 1
• [start:end] 从 start 提取到 end - 1
• [start🔚step] 从 start 提取到 end - 1,每 step 个字符提取一个
与之前一样,偏移量从左至右从 0、1 开始,依次增加;从右至左从 -1、-2 开始,依次减小。如果省略 start,分片会默认使用偏移量 0(开头);如果省略 end,分片会默认使用偏移量 -1(结尾)。
我们来创建一个由小写字母组成的字符串:
letters = ‘abcdefghijklmnopqrstuvwxyz’
仅仅使用 : 分片等价于使用 0 : -1(也就是提取整个字符串):
letters[:]
‘abcdefghijklmnopqrstuvwxyz’
下面是一个从偏移量 20 提取到字符串结尾的例子:
letters[20:]
‘uvwxyz’
现在,从偏移量 10 提取到结尾:
letters[10:]
‘klmnopqrstuvwxyz’
下一个例子提取了偏移量从 12 到 14 的字符(Python 的提取操作不包含最后一个偏移量对应的字符):
letters[12:15]
‘mno’
提取最后三个字符:
letters[-3:]
‘xyz’
下面一个例子提取了从偏移量为 18 的字符到倒数第 4 个字符。注意与上一个例子的区别:
当偏移量 -3 作为开始位置时,将获得字符 x;而当它作为终止位置时,分片实际上会在偏移量 -4 处停止,也就是提取到字符 w:
letters[18:-3]
‘stuvw’
接下来,试着提取从倒数第 6 个字符到倒数第 3 个字符:
letters[-6:-2]
‘uvwx’
如果你需要的步长不是默认的 1,可以在第二个冒号后面进行指定,就像下面几个例子所示。
从开头提取到结尾,步长设为 7:
letters[::7]
‘ahov’
从偏移量 4 提取到偏移量 19,步长设为 3:
letters[4:20:3]
‘ehknqt’
从偏移量 19 提取到结尾,步长设为 4:
letters[19::4]
‘tx’
从开头提取到偏移量 20,步长设为 5:
letters[:21:5]
‘afkpu’
(记住,分片中 end 的偏移量需要比实际提取的最后一个字符的偏移量多 1。)
是不是非常方便?但这还没有完。如果指定的步长为负数,机智的 Python 还会从右到左反向进行提取操作。下面这个例子便从右到左以步长为 1 进行提取:
letters[-1::-1]
‘zyxwvutsrqponmlkjihgfedcba’
事实上,你可以将上面的例子简化为下面这种形式,结果完全一致:
letters[::-1]
‘zyxwvutsrqponmlkjihgfedcba’
分片操作对于无效偏移量的容忍程度要远大于单字符提取操作。在分片中,小于起始位置的偏移量会被当作 0,大于终止位置的偏移量会被当作 -1,就像接下来几个例子展示的一样。
提取倒数 50 个字符:
letters[-50:]
‘abcdefghijklmnopqrstuvwxyz’
提取从倒数第 51 到倒数第 50 个字符:
letters[-51:-50]
‘’
从开头提取到偏移量为 69 的字符:
letters[:70]
‘abcdefghijklmnopqrstuvwxyz’
从偏移量为 70 的字符提取到偏移量为 71 的字符:
letters[70:71]
‘’
2、len() 函数可用于计算字符串包含的字符数:
empty = “”
len(empty)
0
3、使用内置的字符串函数 split() 可以基于分隔符将字符串分割成由若干子串组成的列表。
所谓列表(list)是由一系列值组成的序列,值与值之间由逗号隔开,整个列表被方括号所包裹。
todos = ‘get gloves,get mask,give cat vitamins,call ambulance’
todos.split(’,’)
[‘get gloves’, ‘get mask’, ‘give cat vitamins’, ‘call ambulance’]
上面例子中,字符串名为 todos,函数名为 split(),传入的参数为单一的分隔符 ‘,’。如果不指定分隔符,那么 split() 将默认使用空白字符——换行符、空格、制表符。
todos.split()
[‘get’, ‘gloves,get’, ‘mask,give’, ‘cat’, ‘vitamins,call’, ‘ambulance’]
即使不传入参数,调用 split() 函数时仍需要带着括号,这样 Python 才能知道你想要进行函数调用。
4、join() 的调用顺序看起来有点别扭,与
split() 相反,你需要首先指定粘合用的字符串,然后再指定需要合并的列表:string.
join(list)。因此,为了将列表 lines 中的多个子串合并成完整的字符串,我们应该使用语句:’\n’.join(lines)。下面的例子将列表中的名字通过逗号及空格粘合在一起:
crypto_list = [‘Yeti’, ‘Bigfoot’, ‘Loch Ness Monster’]
crypto_string = ', '.join(crypto_list)
print(‘Found and signing book deals:’, crypto_string)
Found and signing book deals: Yeti, Bigfoot, Loch Ness Monste