如何在Python中合并1D和2D元组?

时间:2018-09-21 11:05:47

标签: python list merge tuples

如何在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方法是什么?

3 个答案:

答案 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)]

现在我们可以使用它来将heightspos_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_unzippedzip(__)旁边所做的。它将列表打开为该函数的各个参数。

因此,现在您可以做到了,

zip(heights, *pos_2D_unzipped)
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]

更好的是,现在您可以压缩两个步骤:解压缩pos_2D以及将heightspos_2D_unzipped压缩为一个步骤。

zip(heights,*zip(*pos_2D))