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