list [x :: y]做什么?

时间:2012-01-27 01:22:50

标签: python syntax

  

可能重复:
  Good Primer for Python Slice Notation

我最近一直在阅读一些示例代码并且我已经阅读了不少网站,但我似乎无法正确地向我提供我正在寻找的答案。如果有人能帮助我,我会很感激。

6 个答案:

答案 0 :(得分:28)

切片

x[startAt:endBefore:skip]

如果您使用skip = 2,则会选择从startAt开始到endBefore结尾的所有其他元素。 [记住:指数列在BETWEEN列表元素中]

要查看此内容,请输入

x = range(100)

在Python提示符下。然后尝试这些事情

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

看看会发生什么。

答案 1 :(得分:21)

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]

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

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

>>> 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]

答案 2 :(得分:3)

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

list[a:b:c],

a是起始索引,b是结束索引,c是可选步长。 这将为您提供一个列表,从索引a(包括)开始,到索引b(不包括),在c的步骤中选择元素。

例如,

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

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

如果你跳过结束索引,就像在你的问题中那样,它将从起始索引(x)中获取元素,选择每个第y个元素,直到它到达列表的末尾,如果y为正,则列表的开头为y是否定的。

E.g。 l [1 :: - 1] = [2,1]

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

默认步长为1.

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

这是一个切片。

[开始:结束:步骤]

留下任何空白都会将它们置于默认值,在您的情况下,它会从y开始每个x个元素,直到列表的末尾。

请参阅:What is :: (double colon) in Python when subscripting sequences?