list[x::y]做什么?

34

最近我一直在阅读一些示例代码,也看了很多网站,但我似乎无法正确地查询到我想要的答案。如果有人可以帮助我,我将不胜感激。

可能是重复问题:
Python切片符号的入门指南


如果你稍微搜索一下,就会发现有很多类似的问题(和类似的答案)的帖子。我认为这个必须关闭。 - juliomalegria
6个回答

42

它可以分割

x[startAt:endBefore:skip]
如果您使用skip = 2,则从startAt开始到endBefore结束的列表中每隔一个元素将被选中。【请记住:索引位于列表元素之间】。要查看此内容,请输入
x = range(100)

在Python提示符处。然后尝试这些内容

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

看看会发生什么。


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]

如果你想要每三个元素

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

最终,你可以通过以下方式删除每个第三个元素

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

4
这是列表切片的语法。 当你说,
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为负)。
例如,l[1::-1] = [2,1] l[1::2] = [2,4,6]
默认步长为1。

1

这意味着使用步长yx开始创建一个新的列表,直到结尾:

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

0
返回一个列表,其中包含从索引x开始的每个第y个元素。
>>> alist = range(10)
>>> alist[0::2]
[0, 2, 4, 6, 8]

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接