协慌网

登录 贡献 社区

在 Python 中以相反的顺序遍历列表

因此,我可以从len(collection)并以collection[0]结尾。

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

答案

使用内置的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()返回一个生成器,并且生成器无法反转,因此您需要先将list

你可以做:

for item in my_list[::-1]:
    print item

(或者您想要在 for 循环中执行的任何操作。)

[::-1]片在 for 循环中反转列表(但实际上不会 “永久” 修改您的列表)。

如果您需要循环索引,并且不想遍历整个列表两次,或者不想使用额外的内存,则可以编写一个生成器。

def reverse_enum(L):
   for index in reversed(xrange(len(L))):
      yield index, L[index]

L = ['foo', 'bar', 'bas']
for index, item in reverse_enum(L):
   print index, item