我正在使用2to3
工具从Py2 - > Py3移植一堆脚本。一个特别的建议的修改搞糊涂了一点,这样我会很感激一些帮助是:Python 2to3,有条件地迭代列表(过滤器vs列表理解)
原线路:
for r in filter(lambda r: r.dir == direction, hm_regions):
... # do stuff with r
hm_regions
持有namedtuples
其中有一个属性叫做dir
和使用这种循环迭代我超过那些匹配给定方向参数的参数。
建议的更改是
for r in [r for r in hm_regions if r.dir == direction]:
我明白,这样做实质上是一样的,所以理论上的结果不应该发生任何变化(没试过)。但我发现双重for
循环非常丑陋,我想这不是执行此迭代最美妙,最优雅的方式。
我也试过for r in hm_regions if r.dir == direction:
由于语法错误而失败,这有点令人沮丧。
编辑:在这里的另一个问题是,如果它是有意义的改变呢?我意识到建议更改的基本动机是filter
不再返回列表。但是在这种情况下,我不会使用这个列表,而只是重复它。因此它应该也一样,对吧?
过滤速度较慢,因为它的价值。请参阅[此链接](http://stackoverflow.com/questions/3013449/list-filtering-list-comprehension-vs-lambda-filter) – chrislessard