在python中组合列表

在python中组合列表,python,python-3.x,Python,Python 3.x,我想合并列表列表,下面是示例 mylist = [[['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']]] 输出应为: output = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] 我还尝试使用了itertools,但它返回的结果如下 >>> combined = list(itertools.chain.from_iterable(mylist)) >>&g

我想合并列表列表,下面是示例

mylist = [[['a', 'b'], ['c', 'd']],
          [['e', 'f'], ['g', 'h']]]
输出应为:

output = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
我还尝试使用了
itertools
,但它返回的结果如下

>>> combined = list(itertools.chain.from_iterable(mylist))
>>> combined
>>> [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']]
如何实现这一点
['a','b','c','d','e','f','g','h']


有人能强调我遗漏了什么吗?

itertools方法之所以不起作用,是因为您拥有的不是列表列表列表,而是列表列表列表
itertools
工作正常,只需将列表展平一次即可。使用部分展平的列表作为参数再次调用完全相同的函数将有效:

flat = list(itertools.chain.from_iterable(itertools.chain.from_iterable(mylist)))
或者,一个简单的列表理解解决方案:

flat = [item for slist in mylist for sslist in slist for item in sslist]
这基本上可以转化为:

for slist in mylist:
    for sslist in slist:
        for item in sslist:
            flat.append(item)
请记住,这两种解决方案仅适用于处理双重嵌套。如果您可能需要处理更多嵌套,我建议您查看如何展平任意嵌套列表。

使用:

输出:

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

正如其他人所指出的,这里有两个级别,因此需要两次调用
chain
。但实际上,您并不需要调用from_iterable的
;您可以改用
*
语法:

list(itertools.chain(*itertools.chain(*mylist)))

你只有两级列表吗?@GuillaumeJacques的可能副本并不完全是一个副本,因为在OP的例子中,子列表的子列表有:
list(itertools.chain.from_iterable(list(itertools.chain.from_iterable(mylist)))
列表(itertools.chain.from_iterable(itertools.chain.from_iterable(mylist))
list(itertools.chain(*itertools.chain(*mylist)))