Python 转换并联接多个嵌套列表
我有以下嵌套列表:Python 转换并联接多个嵌套列表,python,list,nested,Python,List,Nested,我有以下嵌套列表: a = [[[[-79.43402638260521, -1.69184588855758], [-79.4339722432865, -1.691845844583909], [-79.43397178076256, -1.691851284533779], [-79.43395283944169, -1.692053292637794], [-79.43395281911414, -1.692054736321033], [-79.43395535750368,
a = [[[[-79.43402638260521, -1.69184588855758], [-79.4339722432865, -1.691845844583909], [-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794], [-79.43395281911414, -1.692054736321033], [-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723], [-79.43390428016939, -1.692231372437897], [-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557], [-79.43402638260521, -1.69184588855758]]], [[[-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183], [-79.4331269307764, -1.692749541273626], [-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809], [-79.4336510738479, -1.692585646334773], [-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216], [-79.43380615195998, -1.692091785860122], [-79.43381375958064, -1.691845715849684]]]]
我将如何从这一点发展到:
a = [[-79.43402638260521, -1.69184588855758], [-79.4339722432865, -1.691845844583909], [-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794], [-79.43395281911414, -1.692054736321033], [-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723], [-79.43390428016939, -1.692231372437897], [-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557], [-79.43402638260521, -1.69184588855758], [-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183], [-79.4331269307764, -1.692749541273626], [-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809], [-79.4336510738479, -1.692585646334773], [-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216], [-79.43380615195998, -1.692091785860122], [-79.43381375958064, -1.691845715849684]]
因此,基本上删除嵌套列表和每个列表开头和结尾的双括号。我尝试了以下方法,但没有成功:
flatten = lambda list: [item for sublist in list for item in sublist]
注:len(a)=2
非常感谢 您可以尝试:
[z for x in a for y in x for z in y]
为了证明这一点:
len([y for x in a for y in x]) == 21
您可以使用pprint
正确查看它:
pprint.pprint(a)
输出:
[[[[-79.43402638260521, -1.69184588855758],
[-79.4339722432865, -1.691845844583909],
[-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794],
[-79.43395281911414, -1.692054736321033],
[-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723],
[-79.43390428016939, -1.692231372437897],
[-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557],
[-79.43402638260521, -1.69184588855758]]],
[[[-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183],
[-79.4331269307764, -1.692749541273626],
[-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809],
[-79.4336510738479, -1.692585646334773],
[-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216],
[-79.43380615195998, -1.692091785860122],
[-79.43381375958064, -1.691845715849684]]]]
pprint.pprint([z for x in a for y in x for z in y])
输出:
[[-79.43402638260521, -1.69184588855758],
[-79.4339722432865, -1.691845844583909],
[-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794],
[-79.43395281911414, -1.692054736321033],
[-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723],
[-79.43390428016939, -1.692231372437897],
[-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557],
[-79.43402638260521, -1.69184588855758],
[-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183],
[-79.4331269307764, -1.692749541273626],
[-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809],
[-79.4336510738479, -1.692585646334773],
[-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216],
[-79.43380615195998, -1.692091785860122],
[-79.43381375958064, -1.691845715849684]]
假设您的列表不是任意嵌套的,但您只是想更深一层,您可以选择非常简单的方法,如
a = [item for sublist in a for subsublist in sublist for item in subsublist]
演示
>>> a = [[[[-79.43402638260521, -1.69184588855758], [-79.4339722432865, -1.691845844583909], [-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794], [-79.43395281911414, -1.692054736321033], [-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723], [-79.43390428016939, -1.692231372437897], [-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557], [-79.43402638260521, -1.69184588855758]]], [[[-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183], [-79.4331269307764, -1.692749541273626], [-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809], [-79.4336510738479, -1.692585646334773], [-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216], [-79.43380615195998, -1.692091785860122], [-79.43381375958064, -1.691845715849684]]]]
>>> desired = [[-79.43402638260521, -1.69184588855758], [-79.4339722432865, -1.691845844583909], [-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794], [-79.43395281911414, -1.692054736321033], [-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723], [-79.43390428016939, -1.692231372437897], [-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557], [-79.43402638260521, -1.69184588855758], [-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183], [-79.4331269307764, -1.692749541273626], [-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809], [-79.4336510738479, -1.692585646334773], [-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216], [-79.43380615195998, -1.692091785860122], [-79.43381375958064, -1.691845715849684]]
>>> a = [item for sublist in a for subsublist in sublist for item in subsublist]
>>> a == desired
True
然而,正如falsetru所指出的,在您的示例中,嵌套级别为空,在这种情况下,可以很好地清理解决方案 您需要迭代嵌套列表并将它们连接起来 一个简单的方法:
def flatten1(list_of_lists):
"Flattens one level of lists."
result = []
for sub_list in list_of_lists:
result.extend(sub_list)
return result
一种巧妙的方法,利用您可以添加列表的事实:
flatten1 = lambda(list_of_lists): sum(list_of_lists, [])
现在,您可以使用以下方法a[0]=flatt1(a[0])
:
上面类似于:a[0][0]+a[1][0]+…
(没有导致在两者之间创建列表的连接)
结果:
[[-79.43402638260521, -1.69184588855758],
[-79.4339722432865, -1.691845844583909],
[-79.43397178076256, -1.691851284533779],
[-79.43395283944169, -1.692053292637794],
[-79.43395281911414, -1.692054736321033],
[-79.43395535750368, -1.692093535418117],
[-79.43390444734398, -1.69223087834723],
[-79.43390428016939, -1.692231372437897],
[-79.43374523144152, -1.692750043925838],
[-79.4340256570161, -1.692750271834557],
[-79.43402638260521, -1.69184588855758],
[-79.43381375958064, -1.691845715849684],
[-79.43312765678151, -1.691845158387183],
[-79.4331269307764, -1.692749541273626],
[-79.43354270912953, -1.692749879305633],
[-79.43364983051107, -1.692588468489809],
[-79.4336510738479, -1.692585646334773],
[-79.43371548446397, -1.692327269168548],
[-79.43380554258165, -1.692094789340216],
[-79.43380615195998, -1.692091785860122],
[-79.43381375958064, -1.691845715849684]]
这就行了
a = a[0][0] + a[1][0]
这可以扩展为:
a = sum([a[i][0] for i in range(len(a))], [])
在你的特殊情况下,
a[0][0]
?@CarlesMitjans,@Arman,len(a)==2
@falsetru你是对的,不是吗notice@falsetru,这就是[0][0]在这种情况下不起作用的原因。在我看来,这是最明智的解决方案。它也可以适应工作的情况下,有两个以上的元素很容易。完全正确!如果格式一致,这是最简单的方法@你们能谈谈否决投票的原因吗?这不是一个“错误”的答案。是的。在列表的情况下,它起了作用,但不是正确的方法。:)我会编辑的。谢谢你的回答。这似乎是最符合逻辑的解决方案,因为它不依赖于其他库。
a = a[0][0] + a[1][0]
a = sum([a[i][0] for i in range(len(a))], [])