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 的前2 个元素。
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))