Skip to content

理解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 = 0stop_before = len(nums)step = 1

一个惯用的浅克隆列表的方法是使用[:](例如nums_clone = nums[:])。

负值

这三个参数也可以接受负值。对于start_atstop_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]    # []

继续阅读理解Python的切片赋值