关于python:list[x::y]是做什么的?

What does list[x::y] do?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Good Primer for Python Slice Notation

最近我读了一些示例代码,我读了不少网站,但我似乎无法正确地回答我要找的问题。如果有人能帮我,我会感激的。


它切片

1
x[startAt:endBefore:skip]

如果使用skip = 2,则将选择从startAt开始到endBefore结束的所有其他元素。[记住:索引位于列表元素之间]

要查看此内容,请输入

1
x = range(100)

在python提示下。那么试试这些东西

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

看看会发生什么。


L[x::y]是指L的一片,其中x是要开始的索引,y是步长。下面是一些您可以在解释器中尝试的示例

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

如果你想要每三个元素

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

现在每三个元素从l[1]开始

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

现在每三个元素从l[2]开始

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

您可以指定反向的负步骤

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

也可以指定给此切片,但值的长度必须与要替换的切片的长度相同。

1
2
3
>>> 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]

最后,您可以像这样删除每三个元素

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


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

1
list[a:b:c],

A是起始索引,B是结束索引,C是可选步骤大小。这将为您提供一个列表,从索引A(包含)开始,到索引B(不包含)结束,在步骤C中选择元素。

例如,

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

如果我说l[2:6:2],这会给我[3,5]。

如果您跳过结束索引,就像在您的问题中一样,它将从开始索引(x)中提取元素,选择每个yth元素,直到它到达列表的末尾(如果y为正数),如果y为负数,则选择列表的开头。

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

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

默认步长为1。


这意味着从x创建一个新的列表,直到步骤y结束:

1
2
3
>>> l = range(10)
>>> list(l[2::2])
[2, 4, 6, 8]

这是一片。

[开始:结束:步骤]

保留任何空白都将使它们成为默认值,在您的情况下,它将从x开始并一直到列表末尾的每个y元素。

请参见:订阅序列时,python中的::(双冒号)是什么?


返回一个列表,其中包含从索引X开始的列表的每个yth元素。

1
2
3
>>> alist = range(10)
>>> alist[0::2]
[0, 2, 4, 6, 8]