Python的预告倒退了

时间:2011-11-01 16:47:43

标签: python foreach python-2.4

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 个答案:

答案 0 :(得分:18)

您正在寻找内置的reversed()

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

这会反过来迭代序列,而不会创建列表的附加副本。

答案 1 :(得分:1)

使用过滤同时执行此操作不是正确的方法。只需使用reverse,它就会比手动更优化。

答案 2 :(得分:1)

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