如何合并1D&;Python中的2D元组?

如何合并1D&;Python中的2D元组?,python,list,merge,tuples,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) 在哪里 做这件事的蟒蛇式方法是什么?使用 Ex: heights = ( 165, 152, 145, 174) pos_2D = ( (2,3),

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

所以给出了两个列表

heights = (   165,     152,     145,    174)
pos_2D  = ( (2,3), (32,52), (73,11), (43,97) )
我想这样

pos_3D = merge(heights, pos_2D)
在哪里

做这件事的蟒蛇式方法是什么?

使用

Ex:

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))
输出:

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))
使用

Ex:

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))
输出:

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))

它们并不完全是一维或二维的。第一个是整数的元组,第二个是元组。因此,您只需并行地迭代它们(使用zip),并为每对元素创建一个新的元组元素

result = tuple( (*pos, h) for pos, h in zip(pos2D, heights))

它们并不完全是一维或二维的。第一个是整数的元组,第二个是元组。因此,您只需并行地迭代它们(使用zip),并为每对元素创建一个新的元组元素

result = tuple( (*pos, h) for pos, h in zip(pos2D, heights))
使用
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(*\ux)
将元组转换回单个参数(将其视为解压)


代码说明。

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\u 2D\u解压缩
压缩到一起,以获得您想要的内容

为此,我们可以做一些类似于
zip(heights,pos\u 2D\u unzipped)
的事情,但这只会用
pos\u 2D\u unzipped
的两个长元组压缩zip的前两个元素

zip(heights, pos_2D_unzipped)
[(165, (2, 32, 73, 43)), (152, (3, 52, 11, 97))]
您真正需要做的是:为
zip
提供三个参数,1<代码>高度,2。
pos_2D_的第一个元素已解压缩
和3。
pos\u 2D\u解压的第二个元素

所以你可以这样做:

zip(heights, pos_2D_unzipped[0],pos_2D_unzipped[1])
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
真管用!但是你可以做得更快
pos\u 2D\u unzip
是一个包含两个元素(即长元组)的列表,如果您可以将列表中的每个元素直接提供给
zip
,那就太好了。这正是
*pos\u 2D\u unzip
zip(uuu)
侧边所做的。它将列表打开为函数的各个参数

所以现在你可以,

zip(heights, *pos_2D_unzipped)
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
甚至更好的是,现在您可以将解压缩
pos_2D
和解压缩
高度和
pos_2D_解压缩的
两个步骤压缩为一个步骤

zip(高度,*zip(*pos_2D))
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(*\ux)
将元组转换回单个参数(将其视为解压)


代码说明。

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\u 2D\u解压缩
压缩到一起,以获得您想要的内容

为此,我们可以做一些类似于
zip(heights,pos\u 2D\u unzipped)
的事情,但这只会用
pos\u 2D\u unzipped
的两个长元组压缩zip的前两个元素

zip(heights, pos_2D_unzipped)
[(165, (2, 32, 73, 43)), (152, (3, 52, 11, 97))]
您真正需要做的是:为
zip
提供三个参数,1<代码>高度
,2。
pos_2D_的第一个元素已解压缩
和3。
pos\u 2D\u解压的第二个元素

所以你可以这样做:

zip(heights, pos_2D_unzipped[0],pos_2D_unzipped[1])
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
真管用!但是你可以做得更快
pos\u 2D\u unzip
是一个包含两个元素(即长元组)的列表,如果您可以将列表中的每个元素直接提供给
zip
,那就太好了。这正是
*pos\u 2D\u unzip
zip(uuu)
侧边所做的。它将列表打开为函数的各个参数

所以现在你可以,

zip(heights, *pos_2D_unzipped)
>>[(165, 2, 3), (152, 32, 52), (145, 73, 11), (174, 43, 97)]
甚至更好的是,现在您可以将解压缩
pos_2D
和解压缩
高度和
pos_2D_解压缩的
两个步骤压缩为一个步骤


zip(高度,*zip(*pos_2D))

只需为两者创建新的元组即可。或者使用
zip
为两者创建新的元组。或者使用
zip
列表转换似乎是不必要的
元组(j+(i,)用于zip中的i,j(高度,位置2D))
@Chris\u Rands。感谢列表转换似乎不必要
元组(j+(i,)对于zip中的i,j(高度,位置2D))
@Chris\u Rands。谢谢,这正是我要找的:)简单的,一行的!酷:)谢谢蓝注:)这正是我要找的:)简单的东西,一行!酷:)谢谢,蓝注:)你能解释一下你的第一个例子是如何工作的吗?看起来有点神奇(从初学者的角度)。提前谢谢:)那很有帮助。这更有意义,这很有帮助。这更有意义。首先,将2D列表分解为两个元组,其中包含第一个数字x和y。然后*pos_2D_解压允许我们将x和y分别传递给下一个zip函数。您能解释一下第一个示例是如何工作的吗?看起来有点神奇(从初学者的角度)。提前谢谢:)那很有帮助。这更有意义,这很有帮助。这更有意义。首先,将2D列表分解为两个元组,其中包含第一个数字x和y。然后*pos_2D_解压允许我们将x和y分别传递给下一个zip函数。