我得到一个嵌套列表作为输入 简化版如下。
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。参考评论的答案。
答案 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