在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, help
function是非常有用的,因为它可以让你从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()
迭代。
其他的答案是好的,但如果你想做列表的理解风格
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]