Python - slice
List Slice: list[start:end:step]
start,切片的开始位置,包括start,注意列表是从索引 0 开始的。end,切片的结束位置,不包括end。step,切片的步长。默认为 1。
1 | >>> li = [0, 1, 2, 3, 4, 5] |
start为空,则默认为 0;end为空,则默认切片到列表的最后,即len(li) + 1:1
2
3
4
5
6>>> li[:]
[0, 1, 2, 3, 4, 5]
>>> li[:3]
[0, 1, 2]
>>> li[3:]
[3, 4, 5]step不能够为 0.1
2
3
4>>> li[::0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: slice step cannot be zero当
step> 0 时,切片是从从左到右进行的。所以,在没有超出边界时,start要在end的左边,否则返回值为空1
2
3
4
5
6
7
8
9
10>>> li[4:0]
[]
>>> li[0:-1]
[0, 1, 2, 3, 4]
>>> li[:-5]
[0]
>>> li[-6:1]
[0]
>>> li[-6:5:2]
[0, 2, 4]当
step< 0 时,切片是从右到左进行的。所以,在没有超出边界时,start要在end的右边,否则返值为空。1
2
3
4
5
6>>> li[0:4:-1]
[]
>>> li[5:0:-1] # exclude end
[5, 4, 3, 2, 1]
>>> li[::-1] # 经典应用:反转字符串
[5, 4, 3, 2, 1, 0]
注意:无论 step > 0,还是 step < 0,切片都是包含 start,而不包含 end。
边界问题:
start超出左边界,则从索引 0 开始1
2>>> li[-7:]
[0, 1, 2, 3, 4, 5]end超出右边界,则切片到最后结束,即len(li)1
2>>> li[:100]
[0, 1, 2, 3, 4, 5]start和end,一个超出左边界一个超出右边界要看step的值正负来判断1
2
3
4
5
6
7
8>>> li[-10:10]
[0, 1, 2, 3, 4, 5]
>>> li[10:-10]
[]
>>> li[-10:10:-1]
[]
>>> li[10:-10:-1]
[5, 4, 3, 2, 1, 0]start和end都超出了左边界或者都超出了右边界,则为空1
2
3
4>>> li[-10:-20]
[]
>>> li[10:20]
[]