功能python列表切片是否真的不对称?

use*_*936 1 python arrays list slice symmetry

请考虑以下代码:

>>> a = [0, 1, 2]
>>> for i in range(len(a)):
>>>   print a[0:i]

[]
[0]
[0, 1]
Run Code Online (Sandbox Code Playgroud)

但是,当我翻转代码从列表的另一端获取切片时,它不再起作用:

>>> for i in range(len(a)):
>>>   print a[-i:]

[0, 1, 2]
[2]
[1, 2]
Run Code Online (Sandbox Code Playgroud)

使第二段代码工作的唯一方法似乎是颠倒列表,第一种方式,并在打印之前反转每一段.有一个更好的方法吗?我有时使用这种类型的循环,我希望我的代码尽可能干净.

编辑:在两个循环中,我从左到右迭代.如果我为第二个循环翻转迭代方向,它也可以工作.如果我翻转第一个循环的迭代方向,它也有与第二个循环相同的打嗝:

>>> for i in range(len(a)):
>>>   print a[i-1::-1]

[2, 1, 0]
[0]
[1, 0]
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 8

第一次迭代,你正在切片-0,这与切片相同0.只有第二次迭代你作为切片-1,然后-2.

也许你可以使用从负指数开始的范围:

for i in range(-len(a), 0):
    print a[-i:]
Run Code Online (Sandbox Code Playgroud)

  • Arg - 你什么时候出现在这里的?现在我该怎么做FGITW呢?(+1顺便说一句) (3认同)