例如,此代码段:
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
如何使用列表理解缩短此代码?
答案 0 :(得分:7)
您可以使用生成器表达式并使用itertools.chain
消费:
from itertools import chain
out = list(chain.from_iterable(get_bar_list(foo) for foo in foo_list))
答案 1 :(得分:5)
您可以使用嵌套列表理解:
out = [foo for sub_item in foo_list for foo in get_bar_list(sub_item)]
FWIW,我总是很难记住嵌套列表推导的确切顺序,因此我通常更喜欢使用itertools.chain
(如摩西的答案中所述)。但是,如果您真的喜欢嵌套列表推导,那么顺序与您在普通循环中遇到它们的顺序相同(最里面的循环变量可用于列表推导中的第一个表达式):
for sub_item in foo_list:
for foo in get_bar_list(sub_item):
out.append(foo)