簡體   English   中英

生成器與列表附加在Python中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM