在python中组合列表列表

时间:2017-07-01 08:58:41

标签: 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))
>>> combined
>>> [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']]

我如何实现这一目标['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

任何人都能突出我失踪的内容吗?

3 个答案:

答案 0 :(得分:3)

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)

请记住,这两种解决方案都只适用于处理双重嵌套。如果有可能你需要处理更多的嵌套,我建议你查看如何压扁任意嵌套列表。

答案 1 :(得分:2)

正如其他人所说,你在这里有两个级别,所以你需要两次调用chain。但你实际上并不需要from_iterable电话;您可以改为使用*语法:

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

答案 2 :(得分:0)

使用numpy.ndarray.flatten()

import numpy as np

mylist = [ [['a', 'b'], ['c', 'd']], [['e', 'f'], ['g', 'h']] ]    
a = np.array(mylist).flatten().tolist()

print(a)

输出:

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