生成器表达式与列表理解

2024-05-14 06:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

什么时候应该使用生成器表达式,什么时候应该在Python中使用列表理解?

# Generator expression
(x*2 for x in range(256))

# List comprehension
[x*2 for x in range(256)]

Tags: in列表for表达式rangegeneratorlistexpression
3条回答

John的回答很好(当您想多次迭代某个内容时,列表理解会更好)。但是,值得注意的是,如果要使用任何list方法,都应该使用list。例如,以下代码不起作用:

def gen():
    return (something for something in get_some_stuff())

print gen()[:2]     # generators don't support indexing or slicing
print [5,6] + gen() # generators can't be added to lists

基本上,如果您所做的只是迭代一次,请使用生成器表达式。如果你想存储和使用生成的结果,那么你最好能理解列表。

由于性能是最常见的选择原因之一,我的建议是不要担心它,只选择一个;如果您发现您的程序运行太慢,那么,只有这样,您才应该回去,并担心调整您的代码。

迭代生成器表达式列表理解也会做同样的事情。然而,列表理解将首先在内存中创建整个列表,而生成器表达式将动态创建项,因此您可以将其用于非常大的(也可以是无限的!)顺序。

当结果需要重复多次,或者速度至关重要时,使用列表理解。在范围较大或无限大的情况下使用生成器表达式。

相关问题 更多 >