list[x::y] 的作用是什么?

34 投票
6 回答
113445 浏览
提问于 2025-04-17 11:11

可能重复的问题:
关于Python切片语法的好入门

最近我在看一些示例代码,也浏览了不少网站,但就是找不到正确的查询方法来得到我想要的答案。如果有人能帮帮我,我会非常感激。

6 个回答

4

这是关于列表切片的语法。 当你说

list[a:b:c],

a是起始索引,b是结束索引,c是可选的步长。 这意味着你会得到一个从索引a(包括a)开始,到索引b(不包括b)结束的列表,并且每隔c个元素取一个。

举个例子,

l = [1,2,3,4,5,6,7]

如果我说l[2:6:2],那么结果就是[3,5]。

如果你省略了结束索引,就像你提问的那样,它会从起始索引(x)开始,按照每隔y个元素取一个,直到到达列表的末尾(如果y是正数),或者到达列表的开头(如果y是负数)。

例如,l[1::-1] = [2,1]

l[1::2] = [2,4,6]

默认的步长是1。

41

L[x::y] 代表从列表 L 中取出一部分,其中 x 是开始的位置,y 是步长。下面是一些你可以在解释器中尝试的例子。

>>> L=range(20)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

如果你想要每隔3个元素取一个

>>> L[::3]
[0, 3, 6, 9, 12, 15, 18]

现在从 L[1] 开始,每隔3个元素取一个

>>> L[1::3]
[1, 4, 7, 10, 13, 16, 19]

现在从 L[2] 开始,每隔3个元素取一个

>>> L[2::3]
[2, 5, 8, 11, 14, 17]

你还可以指定一个负数步长,这样就可以反向取元素

>>> L[::-1]
[19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

你也可以给这个切片赋值,但赋的值必须和你要替换的切片长度相同

>>> L[::3]=[0,0,0,0,0,0,0]
>>> L
[0, 1, 2, 0, 4, 5, 0, 7, 8, 0, 10, 11, 0, 13, 14, 0, 16, 17, 0, 19]

最后,你可以像这样删除每隔3个元素

>>> del L[::3]
>>> L
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19]
42

它进行切片

x[startAt:endBefore:skip]

如果你使用 skip = 2,那么从 startAt 开始到 endBefore 结束的列表中的每隔一个元素都会被选中。 [记住:索引是在列表元素之间的]

要查看这个效果,可以在 Python 提示符下输入

x = range(100)

然后尝试这些操作

x[::2]
x[::3]
x[10:40:6]

看看会发生什么。

撰写回答