如何在Python中反向遍历列表?所以我可以从集合[len(collection)-1]开始,到集合[0]结束。

我还希望能够访问循环索引。


当前回答

你也可以使用while循环:

i = len(collection)-1
while i>=0:
    value = collection[i]
    index = i
    i-=1

其他回答

我很困惑为什么显而易见的选择到目前为止还没有出现:

如果reversed()不能工作,因为你有一个生成器(如enumerate()的情况),只需使用sorted():

>>> l = list( 'abcdef' )
>>> sorted( enumerate(l), reverse=True )
[(5, 'f'), (4, 'e'), (3, 'd'), (2, 'c'), (1, 'b'), (0, 'a')]
def reverse(spam):
    k = []
    for i in spam:
        k.insert(0,i)
    return "".join(k)

一个简单的方法:

n = int(input())
arr = list(map(int, input().split()))

for i in reversed(range(0, n)):
    print("%d %d" %(i, arr[i]))

使用内置的reversed()函数:

>>> a = ["foo", "bar", "baz"]
>>> for i in reversed(a):
...     print(i)
... 
baz
bar
foo

要访问原始索引,在将其传递给reversed()之前,在列表中使用enumerate():

>>> for i, e in reversed(list(enumerate(a))):
...     print(i, e)
... 
2 baz
1 bar
0 foo

由于enumerate()返回一个生成器,而生成器不能反转,因此需要首先将其转换为一个列表。

无导入的方法:

for i in range(1,len(arr)+1):
    print(arr[-i])

时间复杂度O(n)和空间复杂度O(1)。

一种在内存中创建新列表的方法,使用大列表时要小心:

for i in arr[::-1]:
    print(i)

时间复杂度O(n)和空间复杂度O(n)。