如何使用.extend list方法使用列表理解?

A. *_*iev 2 python list-comprehension

例如,这个片段:

out = []
for foo in foo_list:
    out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
Run Code Online (Sandbox Code Playgroud)

如何使用列表理解来缩短此代码?

Mos*_*oye 8

您可以使用生成器表达式并使用itertools.chain:

from itertools import chain

out = list(chain.from_iterable(get_bar_list(foo) for foo in foo_list))
Run Code Online (Sandbox Code Playgroud)


mgi*_*son 5

您可以使用嵌套列表理解:

out = [foo for sub_item in foo_list for foo in get_bar_list(sub_item)]
Run Code Online (Sandbox Code Playgroud)

FWIW,我总是很难记住嵌套列表理解的确切顺序,因此我通常更喜欢使用itertools.chain(如摩西的答案中所述).但是,如果你真的爱嵌套列表内涵,顺序是一样的,你会遇到他们在一个正常的循环(可用列表中的理解,第一个表达式最内层循环变量):

for sub_item in foo_list:
    for foo in get_bar_list(sub_item):
        out.append(foo)
Run Code Online (Sandbox Code Playgroud)