本篇我们将会学习如何利用切片操作返回列表的子集。

列表切片语法

Python 列表支持以下切片语法,可以从一个列表中返回子列表:

sub_list = list[begin: end: step]

在以上语法中,begin、end 以及 step 参数都必须是有效的下标,而且它们都是可选参数。begin 下标默认为 0,end 下标默认为列表的长度,step 下标默认为 1。

切片操作返回的子列表从 begin(包含)下标开始到 end(不包含)下标结束,下标每次增长 step。

begin、end 以及 step 可以为正数或者负数。正数表示切片操作从左至右返回子列表,负数表示切片操作从右至左返回子列表。

除了返回子列表之外,列表切片还可以用于修改列表,例如更新、调整以及删除列表中的一部分。

列表切片示例

下面我们来看几个列表切片操作的示例。

示例一:基本的列表切片操作

colors 是一个字符串列表:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']

以下示例使用列表切片返回了 colors 列表的一个子列表:

sub_colors = colors[1:4]

print(sub_colors)

输出结果如下:

['orange', 'yellow', 'green']

起始下标为 1,因此切片从“orange”开始。结束下标为 4,所以切片的最后一个元素为“green”。最终,切片操作创建了一个新的列表,包含 3 个元素:[‘orange’, ‘yellow’, ‘green’]。

以上示例没有使用 step 参数,因此切片返回了起始下标到结束下标之间的所有元素。

示例二:返回列表前 N 个元素

如果想要返回列表的前 N 个元素,可以直接省略起始下标:

list[:n]

以下示例返回了 colors 列表中的前三个元素:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
sub_colors = colors[:3]

print(sub_colors)

输出结果如下:

['red', 'orange', 'yellow']

实际上,colors[:3] 等价于 color[0:3]。

示例三:返回列表后 N 个元素

如果想要返回列表中最后的 N 个元素,可以使用负数下标。

例如,以下示例返回了 colors 列表中最后的三个元素:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
sub_colors = colors[-3:]

print(sub_colors)

输出结果如下:

['blue', 'indigo', 'violet']

示例四:返回列表中指定间隔的元素

以下示例返回了列表 colors 中每两个元素中的一个:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
sub_colors = colors[::2]

print(sub_colors)

输出结果如下:

['red', 'yellow', 'blue', 'violet']

示例五:返回反转后的列表

如果我们指定一个负数步长,切片操作将会返回从右到左的列表元素。也就是说,它可以反转列表。例如:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
reversed_colors = colors[::-1]

print(reversed_colors)

输出结果如下:

[‘violet’, ‘indigo’, ‘blue’, ‘green’, ‘yellow’, ‘orange’, ‘red’]

示例六:替换列表中的部分元素

除了返回列表中的部分元素之外,切片操作也可以用于修改列表元素。

以下示例将列表 colors 前两个元素修改为新的颜色:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
colors[0:2] = ['black', 'white']


print(colors)

输出结果如下:

['black', 'white', 'yellow', 'green', 'blue', 'indigo', 'violet']

示例七:替换部分元素并修改列表大小

以下示例使用切片操作替换了列表 colors 中的前两个元素,同时增加了一个新的元素:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
print(f"The list has {len(colors)} elements")

colors[0:2] = ['black', 'white', 'gray']
print(colors)
print(f"The list now has {len(colors)} elements")

输出结果如下:

The list has 7 elements
['black', 'white', 'gray', 'yellow', 'green', 'blue', 'indigo', 'violet']
The list now has 8 elements

示例八:删除列表中的元素

以下示例使用切片操作删除了列表 colors 中的第 3 个、第 4 个以及第 5 个元素:

colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']
del colors[2:5]

print(colors)

输出结果如需:

['red', 'orange', 'indigo', 'violet']

总结

  • 列表切片操作可以用于返回子列表或者修改列表。