字符串的切片是指截取字符串的子串。Python 里截取字符串的子串相当方便。首先,先给一个变量赋值:

1
>>> word="Hello"

第一种切片操作是获得字符串的第 n 个字符所组成的字符串:

1
2
>>> word[1]
'e'

Python 的“下标”也是从 0 开始的。Python 里似乎没有字符这种概念,只有“只有一个字符的字符串”的概念。所以,我们不能像 C 一样地通过指定“数组”下标来改变字符串,比如以下代码是错误的:

1
2
3
4
>>> word[1]='o'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Python 字符串中的下标也可以是负数,表示从右向左的顺序。但是请注意,自然语言中的字符串“最后”一个字符,在 Python 里是第 -1 个字符。并且 Python 认为 -0 = 0, 所以有以下结果:

1
2
3
4
>>> word[-0]
'H'
>>> word[-1]
'o'

Python 也可以切出含有多于一个字符的子串,下标间用冒号隔开:

1
2
>>> word[1:3]
'el'

其实我们可以把 Python 字符串的下标看成“字符间的空隙”,下图能够更好地展示 Python 下标的本质:

 +---+---+---+---+---+
 | H | e | l | l | o |
 +---+---+---+---+---+
 0   1   2   3   4   5
-5  -4  -3  -2  -1  -0

这样你就不难理解下面语句的输出了:

1
2
3
4
5
6
>>> word[3:1]
''
>>> word[1:-1]
'ell'
>>> word[-1:-3]
''

也就是说,如果对于 Python 的下标,如果左边数值标在左边的空隙,右边数值标在右边的空隙,那么这两个空隙之间的内容将是这个表达式的值。反之,将会是空字符串。

若是在字符串下标处写了冒号,而冒号的某一边,甚至两边的数值都是空的话,就表示取“最极端的值”,也就是尽可能地让子串长:

1
2
3
4
5
6
>>> word[:]
'Hello'
>>> word[1:]
'ello'
>>> word[:-2]
'Hel'

Python 中,用下标表示的字符串子串,是只读的。并且在内存中,应该是一个副本。

原创文章,转载请注明来源:http://euyuil.com/2143/note-about-python-string-slicing/