如何将多个返回的列表合并为一个[重复]
Posted
技术标签:
【中文标题】如何将多个返回的列表合并为一个[重复]【英文标题】:How to merge multiple returned lists into one [duplicate] 【发布时间】:2014-10-19 05:31:15 【问题描述】:下面的代码生成列表列表:[[1, 2, 3], [4, 5, 6]]
如何修改它,结果是一个简单的列表:`[1,2,3,4,5,6]?
def functA():
return [1,2,3]
def functB():
return [4,5,6]
def functC():
return None
functs=[functA, functB, functC]
result=[a for a in [funct() for funct in functs] if a]
print result
【问题讨论】:
看看list.extend 我想在列表理解中实现这一点。 【参考方案1】:您也可以使用列表组合进行展平:
result=[ x for y in (a for a in (funct() for funct in functs) if a) for x in y]
【讨论】:
【参考方案2】:如果您真的想使用列表推导,试试这个:
result= [item
for sublist in [funct()
for funct in functs]
if sublist is not None
for item in sublist]
【讨论】:
【参考方案3】:我建议使用来自itertools
的chain
但是,您的函数应该返回一个空列表而不是 None
,因为这对预期格式更友好。
由于第一个列表是临时的,我将其设为生成器序列。
from itertools import chain
def functA():
return [1,2,3]
def functB():
return [4,5,6]
def functC():
return [] # returns an empty list, in line with what is expected.
functs=[functA, functB, functC]
result = list(chain(*(a() for a in functs)))
print result
【讨论】:
【参考方案4】:使用itertools.chain
方法:
例如,这段代码:
from itertools import chain
print list(chain.from_iterable([[1, 2, 3], [4, 5, 6]]))
将打印出来:
[1, 2, 3, 4, 5, 6]
在你的情况下,你可以使用:
result = list(chain.from_iterable(a for a in [funct() for funct in functs] if a))
result
将是:
[1, 2, 3, 4, 5, 6]
【讨论】:
list(chain(*[a for a in [funct() for funct in functs] if a]))
也可以使用以上是关于如何将多个返回的列表合并为一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章