¿Cómo usar la comprensión de lista con el método de lista de extensión?

Por ejemplo, este fragmento de código:

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

¿Cómo acortar este código usando la lista de comprensión ?

Puedes usar una expresión generadora y consumirla con itertools.chain :

 from itertools import chain out = list(chain.from_iterable(get_bar_list(foo) for foo in foo_list)) 

Puedes usar una lista-comprensión anidada:

 out = [foo for sub_item in foo_list for foo in get_bar_list(sub_item)] 

FWIW, siempre me cuesta mucho recordar exactamente el orden en que vienen las cosas para las comprensiones de listas anidadas, por lo que generalmente prefiero usar itertools.chain (como lo menciona Moisés). Sin embargo, si realmente ama las listas de comprensión anidadas, el orden es el mismo que el que encontraría en un bucle normal (con la variable de bucle más interna disponible para la primera expresión en la lista de comprensión):

 for sub_item in foo_list: for foo in get_bar_list(sub_item): out.append(foo)