因此有两个列表
y_new = ( 165, 152, 145, 174)
pos_2D = ( (2,3), (32,52), (73,11), (43,97) )
我想这样
pos_2D_new = setCol(2, y_new, pos_2D)
其中第2列是Y坐标。
pos_2D_new = ( (2,165), (32,152), (73,145), (43,174) )
如何在Python中将1D设置为2D元组?
答案 0 :(得分:2)
您可以将生成器表达式与zip
一起使用:
pos_2D_new = tuple((x, y) for (x, _), y in zip(pos_2D, y_new))
使用示例输入,pos_2D_new
将变为:
((2, 165), (32, 152), (73, 145), (43, 174))
答案 1 :(得分:1)
您可以执行以下操作:
pos_2D_new = [ (x, y2) for (x, _), y2 in zip(pos_2D, y_new) ]
或者如果您想要一个元组:
pos_2D_new = tuple((x, y2) for (x, __), y2 in zip(pos_2D, y_new))
因此,我们同时遍历pos_2D
和ynew
,并且每次构造新的元组(x, y2)
时都如此。
上面的内容当然不是很通用,我们可以使其更通用,并允许指定要替换的项目,例如:
def replace_coord(d, old_pos, new_coord):
return tuple(x[:d] + (y,) + x[d+1:] for x, y in zip(old_pos, new_coord))
因此对于 x 坐标,您可以使用replace_coord(0, old_pos, new_x_coord)
,而对于 y 坐标,则为replace_coord(1, old_pos, new_y_coord)
。这也适用于三个或更多个维度的坐标。
答案 2 :(得分:0)
愿意给
def setCol(idx, coords_1d, coords_nd):
# recalling that indexing starts from 0
idx -= 1
return [
c_nd[:idx] + (c_1d,) + c_nd[idx+1:]
for (c_1d, c_nd) in zip(coords_1d, coords_nd)
]
和
>>> setCol(2, y_new, pos_2D)
[(2, 165), (32, 152), (73, 145), (43, 174)]