如何在Python中合并1D和2D元组?
因此有两个列表
heights = ( 165, 152, 145, 174)
pos_2D = ( (2,3), (32,52), (73,11), (43,97) )
我想这样
pos_3D = merge(heights, pos_2D)
其中
pos_3D = ( (2,3,165), (32,52,152), (73,11,145), (43,97,174) )
执行此操作的Python方法是什么?
答案 0 :(得分:2)
使用zip
例如:
heights = ( 165, 152, 145, 174)
pos_2D = ( (2,3), (32,52), (73,11), (43,97) )
print(tuple(j + (i,) for i, j in zip(heights, pos_2D)) )
输出:
((2, 3, 165), (32, 52, 152), (73, 11, 145), (43, 97, 174))
答案 1 :(得分:0)
它们不完全是一维或二维。第一个只是一个整数元组,第二个是一个元组元组。因此,您只需使用zip对其进行并行迭代,并为每对元素创建一个新的元组元素
result = tuple( (*pos, h) for pos, h in zip(pos2D, heights))
答案 2 :(得分:0)
与zip
zip(heights,*zip(*pos_2D))
>>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
或者如果您想要tuple
tuple(zip(heights,*zip(*pos_2D)))
>>>((165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97))
zip
从两个参数中列出元组,而zip(*_)
将元组隐蔽为单个参数(将其视为解压缩)。
代码说明。
heights = ( 165, 152, 145, 174)
pos_2D = ( (2,3), (32,52), (73,11), (43,97) )
使用第二个元组pos_2D
,我们可以将其解压缩为单个参数,
pos_2D_unzipped = zip(*pos_2D)
print pos_2D_unzipped
>> [(2, 32, 73, 43), (3, 52, 11, 97)]
现在我们可以使用它来将heights
和pos_2D_unzipped
压缩在一起以获得所需的内容。
为此,我们可以执行类似zip(heights, pos_2D_unzipped)
的操作,但是只能使用pos_2D_unzipped
的两个长元组来压缩zip的前两个元素。
zip(heights, pos_2D_unzipped)
[(165, (2, 32, 73, 43)), (152, (3, 52, 11, 97))]
您真正需要做的是:为zip
提供三个参数,分别为1. heights
,2。pos_2D_unzipped
的第一个元素和3. pos_2D_unzipped
的第二个元素
因此您可以执行以下操作:
zip(heights, pos_2D_unzipped[0],pos_2D_unzipped[1])
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
哪个有效!但是您可以更快地执行操作。 pos_2D_unzipped
是两个元素(长元组)的列表,如果可以将列表中的每个元素直接提供给zip
,那就太好了。而这正是*pos_2D_unzipped
在zip(__)
旁边所做的。它将列表打开为该函数的各个参数。
因此,现在您可以做到了,
zip(heights, *pos_2D_unzipped)
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
更好的是,现在您可以压缩两个步骤:解压缩pos_2D
以及将heights
和pos_2D_unzipped
压缩为一个步骤。
zip(heights,*zip(*pos_2D))