Python';他向后走
python是否有一种向后执行foreach的方法?我希望做一个filter()(或list comprehension)并同时反转一个列表,这样我就可以避免单独做(我怀疑这会比较慢)。我使用的是Python2.4(不幸的是,我不得不这么做),但我也很好奇Python3.0中的列表理解解决方案是什么 编辑这两种解决方案似乎相同:Python';他向后走,python,foreach,python-2.4,Python,Foreach,Python 2.4,python是否有一种向后执行foreach的方法?我希望做一个filter()(或list comprehension)并同时反转一个列表,这样我就可以避免单独做(我怀疑这会比较慢)。我使用的是Python2.4(不幸的是,我不得不这么做),但我也很好奇Python3.0中的列表理解解决方案是什么 编辑这两种解决方案似乎相同: python -m timeit -s 'x=[1,2,3,4,5]*99; filter(lambda x: x == 5, reversed(x))' 10000
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
与过滤同时进行不是正确的方法。只需使用
反向
,它将比手动操作优化得多。您正在寻找内置的:
这会以相反的顺序迭代,而不会创建列表的额外副本。这里是一个很好的方法,可以用来实现反向迭代:我不知道你为什么会怀疑它会变慢,至少在某种程度上你应该担心它。对我来说,这听起来有点像过早的优化。在我看来,filter()经过一次,reverse()经过第二次,所以我认为有一种方法可以通过一次遍历来实现。您可以随时手动展开这两次遍历,但如果用Python编写,速度不会更快,而且开销几乎可以肯定(特别是如果你没有确凿的数据来证明这一点)不值得编写C扩展模块。这是假设您也用C编写比较,为每个项目调用Python将大大减少任何潜在收益。大+1用于提供探索替代方案的链接。-1:最好还提供链接文章的摘要。否则,如果链接失败,这个答案毫无用处。
>>> for i in reversed(range(5)):
... print i
...
4
3
2
1
0