Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换并联接多个嵌套列表_Python_List_Nested - Fatal编程技术网

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))], [])