如何在Python中反向遍历列表?所以我可以从集合[len(collection)-1]开始,到集合[0]结束。
我还希望能够访问循环索引。
如何在Python中反向遍历列表?所以我可以从集合[len(collection)-1]开始,到集合[0]结束。
我还希望能够访问循环索引。
当前回答
你可以:
for item in my_list[::-1]:
print item
(或者你想在for循环中做的任何事情。)
[::-1]片在for循环中反转列表(但实际上不会“永久”修改列表)。
其他回答
使用内置的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()返回一个生成器,而生成器不能反转,因此需要首先将其转换为一个列表。
input_list = ['foo','bar','baz']
for i in range(-1,-len(input_list)-1,-1)
print(input_list[i])
我认为这也是一种简单的方法……从end开始读取,并一直递减直到列表的长度,因为我们从不执行“end”索引,因此也添加了-1
我很困惑为什么显而易见的选择到目前为止还没有出现:
如果reversed()不能工作,因为你有一个生成器(如enumerate()的情况),只需使用sorted():
>>> l = list( 'abcdef' )
>>> sorted( enumerate(l), reverse=True )
[(5, 'f'), (4, 'e'), (3, 'd'), (2, 'c'), (1, 'b'), (0, 'a')]
一个简单的方法:
n = int(input())
arr = list(map(int, input().split()))
for i in reversed(range(0, n)):
print("%d %d" %(i, arr[i]))
我认为最优雅的方法是使用以下生成器转换枚举和反向
(-(ri+1), val) for ri, val in enumerate(reversed(foo))
它生成一个倒数的枚举迭代器
例子:
foo = [1,2,3]
bar = [3,6,9]
[
bar[i] - val
for i, val in ((-(ri+1), val) for ri, val in enumerate(reversed(foo)))
]
结果:
[6, 4, 2]