理解Python的切片表示法
Python切片表示法
- 理解Python的切片表示法(本博文)
- 理解Python的切片赋值
基本语法
Python的切片表示法用于返回一个列表或列表的一部分。基本语法如下:
[start_at:stop_before:step]
其中,start_at
是要返回的第一个元素的索引(包括在内),stop_before
是要停止的元素之前的索引(不包括在内),step
是任意两个元素之间的步长。
这三个参数都是可选的,意味着你可以省略其中任何一个。例如:
nums = [1, 2, 3, 4, 5]
nums[1:4] # [2, 3, 4] (从0开始,停在4之前)
nums[2:] # [3, 4, 5] (从0开始,停在列表末尾)
nums[:3] # [1, 2, 3] (从0开始,停在3之前)
nums[1:4:2] # [2, 4] (从1开始,停在4之前,每隔2个元素)
nums[2::2] # [3, 5] (从2开始,停在列表末尾,每隔2个元素)
nums[:3:2] # [1, 3] (从0开始,停在3之前,每隔2个元素)
nums[::2] # [1, 3, 5] (从0开始,停在列表末尾,每隔2个元素)
nums[::] # [1, 2, 3, 4, 5] (从0开始,停在列表末尾)
从上面的示例中,您可能已经注意到,默认值为start_at = 0
,stop_before = len(nums)
,step = 1
。
一个惯用的浅克隆列表的方法是使用
[:]
(例如nums_clone = nums[:]
)。
负值
这三个参数也可以接受负值。对于start_at
和stop_before
,负值表示从列表的末尾开始计数,而不是从开头计数。例如,-1
表示最后一个元素,-2
表示倒数第二个元素,依此类推。例如:
nums = [1, 2, 3, 4, 5]
nums[1:-2] # [2, 3] (从1开始,到倒数第二个之前停止)
nums[-3:-1] # [3, 4] (从倒数第三个开始,到最后一个之前停止)
负数的step
意味着列表被反向切片(从末尾到开头)。这也意味着start_at
应该大于stop_before
,而在反向步长的上下文中,stop_before
更像是stop_after
,如果您查看的是非反向的列表。例如:
nums = [1, 2, 3, 4, 5]
nums[::-1] # [5, 4, 3, 2, 1] (反向)
nums[4:1:-1] # [5, 4, 3] (反向,从4开始,到1之后停止)
nums[-1:1:-2] # [5, 3] (反向,从最后一个开始,到1之后停止,每隔2个取一个)
空切片
请记住,切片表示法非常宽容,所以如果参数的值超出了列表的范围,你将得到一个空列表。例如:
nums = [1, 2, 3, 4, 5]
nums[6:8] # []
nums[:-10] # []