如何将多个返回的列表合并为一个[重复]

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】:

我建议使用来自itertoolschain

但是,您的函数应该返回一个空列表而不是 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])) 也可以使用

以上是关于如何将多个返回的列表合并为一个[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将三个列表合并为一个列表[重复]

Python:如何将具有相同变量类型的多个列表合并到一个列表列表中?

将三个列表合并为一个列表[重复]

Ubuntu如何使用终端将多个文本文件合并为一个

如何使用Java8流将列表列表转换为单个列表[重复]

如何将多个Excel工作表合并至一张Excel表格内?