例如,这个片段:如何使用.extend列表方法使用列表理解?
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
如何缩短使用列表理解这个代码?
例如,这个片段:如何使用.extend列表方法使用列表理解?
out = []
for foo in foo_list:
out.extend(get_bar_list(foo)) # get_bar_list return list with some data
return out
如何缩短使用列表理解这个代码?
您可以用生成器表达式和消耗它itertools.chain
:
from itertools import chain
out = list(chain.from_iterable(get_bar_list(foo) for foo in foo_list))
如果列表的长度是小的,则可以做到这一点与求和生成器表达式替代:
sum((get_bar_list(foo) for foo in foo_list), [])
甲nested list comprehension是更有效的,但更少的可读性。
您可以使用嵌套列表理解:
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)
相关,如果不重复:http://stackoverflow.com/q/952914/1639625 –
@parsenz不,因为这将创建列表的列表,而OP正在寻找一个平坦的列表。 – Delgan