繁体   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