Удалить строку, если она содержит повторяющееся значение в одной строке - PullRequest
0 голосов
/ 04 августа 2020

У меня есть список, который выглядит примерно так

a = [[1080, 1080, 1080, 1080], [0, 0, 0, 0], [1080, 1080, 1080, 1080],[1080, 0, 1080, 0],[0, 1080, 23, 1080], [1458, 975, 1579, 1077], [1458, 975, 1579, 1077]]

В идеале он должен быть таким

a=[[1458, 975, 1579, 1077], [1458, 975, 1579, 1077]]

Все дубликаты в одной строке удаляются только или если x [0 ] равно x [2], или если x [1] равно x [3]. Не имеет значения, numpy или список.

Вот моя попытка

a = [[1080, 1080, 1080, 1080], [0, 0, 0, 0], [1080, 1080, 1080, 1080],[1080, 0, 1080, 0],[0, 1080, 23, 1080], [1458, 975, 1579, 1077], [1458, 975, 1579, 1077]]
new_cleaned_list = []
for x in a:
    if x[0] == x[1] and x[0] == x[2] and x[0] == x[3] or x[0] == x[2] or x[1] == x[3]:
        pass
    else:
        new_cleaned_list.append(x)

Приложение удаляет ненулевые координаты в изображении.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Как прокомментировал @ggorlen, вам не нужно проверять дублирование. В этом случае вы можете использовать нарезку:

a = np.array(a)

mask = (a[:,0] != a[:,2]) & (a[:,1] !=a[:,3])
# or equivalently
# mask = (a[:,:2] != a[:,2:]).all(1);


out = a[mask]
array([[1458,  975, 1579, 1077],
       [1458,  975, 1579, 1077]])
0 голосов
/ 04 августа 2020

Одно из возможных решений, предполагающее, что a - это массив Numpy:

a[~np.apply_along_axis(lambda row: (row[0] == row[2]) or (row[1] == row[3]), 1, a)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...