Python установить столбец в списке списка 2D матрицы - PullRequest
0 голосов
/ 08 октября 2018

Итак, учитывая два списка

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

Какустановить 1D в двумерный кортеж в Python?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Вы можете сделать это:Когда мы создадим новый кортеж (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).Это также работает для координат в трех или более измерениях.

0 голосов
/ 08 октября 2018

Что даст

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)]
0 голосов
/ 08 октября 2018

Вы можете использовать выражение генератора с 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...