Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python';他向后走_Python_Foreach_Python 2.4 - Fatal编程技术网

Python';他向后走

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是否有一种向后执行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))' 
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