python 列表反向切片不包括第一项

pyhon list reverse slicing excludes 1st item

我想使用列表的切片以相反的顺序遍历列表,但我无法在输出中获得列表的第一个(索引 0)项。

l=[0,1,2,3,4,5,6]
s=len(l)

for i in range(s):
    print(l[s:i:-1])

输出缺少列表的第一项:

 [6, 5, 4, 3, 2, 1]
 [6, 5, 4, 3, 2]
 [6, 5, 4, 3]
 [6, 5, 4]
 [6, 5]
 [6]
 []

看起来只是一个移位问题,但是 i-1i=0 时不能用作索引。

到目前为止我能想到的唯一解决方案是丑陋的:

l=[0,1,2,3,4,5,6]
s=len(l)

for i in range(s):
    if i == 0:
        print(l[s::-1])
    else:
        print(l[s:i-1:-1])

输出(我真正想要的):

 [6, 5, 4, 3, 2, 1, 0]
 [6, 5, 4, 3, 2, 1]
 [6, 5, 4, 3, 2]
 [6, 5, 4, 3]
 [6, 5, 4]
 [6, 5]
 [6]

对我来说,python 中的设计失败,因为在反向切片中没有其他方法可以让列表的第一项然后将字段留空,当你有什么问题那里有一个变量...告诉我如何做得更好。

您可以将其反向切片,然后遍历反向切片

l=[0,1,2,3,4,5,6]
s=len(l)

for i in range(s):
    print(l[::-1][0:s-i])
    
print(l)

并且不会更新原始列表

您可以按照已经建议的那样通过反转列表来避免任何检查或切片。

定义列表后,您可以执行以下操作:l.reverse() l = l[::-1](两者是一样的)

对于未来,只要知道,在对列表进行切片时,第一个索引包括在内,但最后一个索引不包括在内。所以如果你 mylist = [0, 1, 2, 3, 4]mylist[1:3] 将 return [1, 2]

你可以使用 None.

for i in range(s):
    print(l[: i-1 if i else None : -1])