什么时候应该使用生成器表达式,什么时候应该在 Python 中使用列表推导式?
# Generator expression (x*2 for x in range(256)) # List comprehension [x*2 for x in range(256)]
约翰的回答很好(当你想多次迭代某些东西时,列表理解会更好)。但是,还值得注意的是,如果您想使用任何列表方法,则应该使用列表。例如,以下代码将不起作用:
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
基本上,如果您所做的只是迭代一次,请使用生成器表达式。如果您想存储和使用生成的结果,那么最好使用列表理解。
由于性能是选择其中一个而不是另一个的最常见原因,我的建议是不要担心它,只选择一个;如果你发现你的程序运行得太慢,那么只有在那时你才应该回去担心调整你的代码。