如何在Python中展开列表的深层列表?

时间:2018-04-18 13:29:06

标签: python list

我得到一个嵌套列表作为输入 简化版如下。

myList=[[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]

我希望将其解压缩到简单的清单列表中 我可以这样做 -

    simpleList=[]
    for i in myList:
        for j in i:
            simpleList.append(j)

根据需要,simpleList是

[[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]

我的问题: -
我所做的可能是初学者的编码方法 是否有更专业,更有效(和 pythonic )的方法来解压缩这个嵌套列表?
谢谢。

修改: -
我的方法不适用于深层嵌套列表 例如[[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]],[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9],[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]]
PL。参考评论的答案。

3 个答案:

答案 0 :(得分:4)

使用 itertools

中的chain
from itertools import chain
myList=[[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]
print(list(chain.from_iterable(myList)))   #print(list(chain(*myList)))

<强>输出:

[[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]

答案 1 :(得分:1)

[[1, 2, 3], [4, 5, 6], [2, 3, 4], [3, 4, 5], [4, 6, 7], [5, 7, 9]]

输出:

--wrap

答案 2 :(得分:1)

您可以使用recursive功能执行此操作,以便解决任何深度的嵌套列表

def unwrap_list(mylist, result):
   if any(isinstance(i, list) for i in mylist):
      for value in mylist:
         unwrap_list(value, result)
   else:
      result.append(mylist)

mylist = [[[1,2,3],[4,5,6]],[[2,3,4],[3,4,5]],[[4,6,7],[5,7,9]]]
result = []
unwrap_list(mylist, result)
print(result)

另一种方法是使用生成器

def flatten(L):
    for item in L:
        if any(isinstance(i, list) for i in item):
          yield from flatten(item)
        else:
          yield item