8

python是否有一种向后做foreach的方法?我希望同时做一个 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
4

3 回答 3

28

您正在寻找内置的reversed()

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

这会反向迭代序列,而不会创建列表的额外副本。

于 2011-11-01T16:52:22.640 回答
2

这不是与过滤同时进行的正确方法。只需使用reverse,它将比手动优化得多。

于 2011-11-01T16:51:57.463 回答
0

这是一个很好的汇编,你可以做一些事情来实现向后迭代:http ://christophe-simonis-at-tiny.blogspot.com/2008/08/python-reverse-enumerate.html

于 2011-11-01T16:58:38.810 回答