Python 的反向 foreach

11 投票
3 回答
14293 浏览
提问于 2025-04-17 05:26

Python有没有办法反向遍历列表?我希望能同时使用filter()(或者列表推导式)和反转列表,这样就可以避免分开做(我觉得那样会慢)。我现在用的是Python 2.4(我不得不这样做),但我也想知道在Python 3.0中,列表推导式的解决方案是什么。

编辑 这两种解决方案看起来是一样的:

python -m timeit -s 'x=[1,2,3,4,5]*99; filter(lambda x: x == 5, reversed(x))' 
100000000 loops, best of 3: 0.0117 usec per loop
python -m timeit -s 'x=[1,2,3,4,5]*99; x.reverse(); filter(lambda x: x == 5, x)'    
100000000 loops, best of 3: 0.0117 usec per loop

3 个回答

2

这样做并不是正确的方法,尤其是在过滤的同时。直接使用 reverse 这个功能会更有效率,比手动去做要好得多。

32

你可以使用内置的 reversed() 函数:

>>> for i in reversed(range(5)):
...     print i
... 
4
3
2
1
0

这个函数会反向遍历你的序列,也就是说,它会从最后一个元素开始,逐个向前查看,而不会额外创建一个列表的副本。

-1

这里有一个很好的总结,介绍了你可以做的事情来实现反向迭代:http://christophe-simonis-at-tiny.blogspot.com/2008/08/python-reverse-enumerate.html

撰写回答