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

所以我可以从len(collection)开始,到collection[0]结束。

编辑:对不起,我忘了提及我也想要能够访问循环索引。

使用reversed()内置函数:

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

还要访问原始索引:

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

你可以做:

 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 

可以这样做:

 我在范围内(len(集合)-1,-1,-1):
    打印collections[i]

所以你的猜测是非常接近:)有点尴尬,但它基本上是说:从1开始比len(collection) ,继续前进,直到你刚刚在-1之前,以-1的步骤。

Fyi, helpfunction是非常有用的,因为它可以让你从Python控制台查看文档,例如:

help(range)

reversed内build函数很方便:

 for item in reversed(sequence): 

反向的文档解释了它的局限性。

对于我必须沿着索引反向移动序列的情况(例如就地修改序列长度),我有这个函数定义了我的codeutil模块:

 import itertools def reversed_enumerate(sequence): return itertools.izip( reversed(xrange(len(sequence))), reversed(sequence), ) 

这个避免了创build序列的副本。 显然, reversed限制仍然适用。

我喜欢单线发电机的方法:

 ((i, sequence[i]) for i in reversed(xrange(len(sequence)))) 
 >>> l = ["a","b","c","d"] >>> l.reverse() >>> l ['d', 'c', 'b', 'a'] 

要么

 >>> print l[::-1] ['d', 'c', 'b', 'a'] 

如果不重build一个新的列表,你可以通过build立索引来完成:

 >>> foo = ['1a','2b','3c','4d'] >>> for i in range(len(foo)): ... print foo[-(i+1)] ... 4d 3c 2b 1a >>> 

要么

 >>> length = len(foo) >>> for i in range(length): ... print foo[length-i-1] ... 4d 3c 2b 1a >>> 

使用list.reverse() ,然后list.reverse()迭代。

http://docs.python.org/tutorial/datastructures.html

其他的答案是好的,但如果你想做列表的理解风格

 collection = ['a','b','c'] [item for item in reversed( collection ) ] 
 def reverse(spam): k = [] for i in spam: k.insert(0,i) return "".join(k) 

相反的function在这里派上用场:

 myArray = [1,2,3,4] myArray.reverse() for x in myArray: print x 

使用序列对象的内置函数reversed() ,该方法具有所有序列的作用

更详细的参考链接

要使用负指标:从-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 

你也可以使用while循环:

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

一个简单的方法是:

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

因为这是值得的,你也可以这样做。 很简单。

 a = [1, 2, 3, 4, 5, 6, 7] for x in xrange(len(a)): x += 1 print a[-x]