如何在Python中反向迭代列表?


请参见:如何获得列表的反向副本(避免在.reverse后链接方法时使用单独的语句)?


当前回答

你也可以使用数组索引的逐位补码反向遍历数组:

>>> array = [0, 10, 20, 40]
>>> [array[~i] for i, _ in enumerate(array)]
[40, 20, 10, 0]

不管你做什么,不要这样做;)

其他回答

>>> xs = [0, 10, 20, 40]
>>> xs[::-1]
[40, 20, 10, 0]

这里将解释扩展片语法。请参见文档。

use

print(list(reversed(list_name)))
for x in array[::-1]:
    do stuff

使用反向(数组)可能是最好的方法。

>>> array = [1,2,3,4]
>>> for item in reversed(array):
>>>     print item

如果你需要了解如何实现这个不使用内置反转。

def reverse(a):
    midpoint = len(a)/2
    for item in a[:midpoint]:
        otherside = (len(a) - a.index(item)) - 1
        temp = a[otherside]
        a[otherside] = a[a.index(item)]
        a[a.index(item)] = temp
    return a

这需要O(N)时间。

你总是可以像对待堆栈一样对待列表,只是从列表的后端取出堆栈顶部的元素。这样你就可以利用堆栈的先进后出特性。当然你消耗的是第一个数组。我确实喜欢这种方法,因为它非常直观,因为您可以看到一个列表是从后端消耗的,而另一个是从前端构建的。

>>> l = [1,2,3,4,5,6]; nl=[]
>>> while l:
        nl.append(l.pop())  
>>> print nl
[6, 5, 4, 3, 2, 1]