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

1052

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

我还想能够访问循环索引。

28个回答

2
您也可以使用 while 循环:
i = len(collection)-1
while i>=0:
    value = collection[i]
    index = i
    i-=1

2
使用负数索引:从-1开始,并在每次迭代时向后倒退1步。
>>> a = ["foo", "bar", "baz"]
>>> for i in range(-1, -1*(len(a)+1), -1):
...     print i, a[i]
... 
-1 baz
-2 bar
-3 foo

2
作为 Python 初学者,我发现这种方法更容易理解且可以翻转一个列表。
``` 假设 numlst = [1, 2, 3, 4] for i in range(len(numlst)-1,-1,-1): ```
ie., for i in range(3,-1,-1), where 3 is length of list minus 1,
second -1 means list starts from last element and 
third -1 signifies it will traverse in reverse order.

print( numlst[ i ] )

输出结果为4、3、2、1。


1

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

如果reversed()无法工作,因为你有一个生成器(例如使用enumerate()),只需使用sorted()

>>> l = list( 'abcdef' )
>>> sorted( enumerate(l), reverse=True )
[(5, 'f'), (4, 'e'), (3, 'd'), (2, 'c'), (1, 'b'), (0, 'a')]

1
input_list = ['foo','bar','baz']
for i in range(-1,-len(input_list)-1,-1)
    print(input_list[i])

我认为这也是一种简单的方法... 从末尾开始阅读并保持递减,直到列表的长度,因为我们从未执行过“end”索引,因此还添加了-1。

1
其他答案都不错,但如果你想以列表推导式的方式实现,可以这样做:
collection = ['a','b','c']
[item for item in reversed( collection ) ]

2
这不就是reversed(collection)的反转吗?添加列表推导式除了不必要的计算外,什么也没有做。这就像写a = [item for item in [1, 2, 3]]与a = [1, 2, 3]一样。 - EpicDavi

0
一个简单的方法:
n = int(input())
arr = list(map(int, input().split()))

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

0

你可以使用生成器:

li = [1,2,3,4,5,6]
len_li = len(li)
gen = (len_li-1-i for i in range(len_li))

最后:

for i in gen:
    print(li[i])

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接