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