我正在使用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