[英]Generator vs List Append in Python
對於簡單的列表創建,建議使用列表推導。 但是,當涉及更復雜的場景時,跨越多行的列表創建更為可取。
例如,一個簡單的任務
[x for x in range(10)]
例如,對於更復雜的任務
result = []
for x in complicated:
if y is complex:
for z in intricate_stuff:
result.append(convoluted(z))
(我可能仍會對上面的例子使用多行列表理解,但無論如何你都明白了。)
最近,我發現自己實現列表創建,就像使用如下生成器:
def gen():
for x in complicated:
if y is complex:
for z in intricate_stuff:
yield convoluted(z)
result = [x for x in gen()]
我更自然地使用這樣的生成器來創建一個列表(好吧,生成一個列表),但我覺得它可能會增加不必要的復雜性。
這是推薦的嗎? 或者,哪種方式更pythonic?
生成器一次一個地構建元素。 對於如下陳述:
for e in my_generator():
pass
每次在迭代期間生成變量e
的值,不存儲先前迭代中的e
的值。 因此它不存儲列表的整個元素。 所以它具有內存效率。
但是如果你打算在列表理解中使用生成器,那么使用生成器是沒有意義的,因為需要生成和存儲所有元素。
在這種情況下,您可以使用如下所示的列表理解:
result = [ convoluted(z) for x in complicated if y is complex for z in intricate_stuff ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.