удалить подмножество из списка - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть два списка A и B.

Я хочу удалить из B все подмножества, начинающиеся с (x, y) из A. Например, если у меня есть

A = [(1,2), (1,3), (1,5)]
B = [(1,2,10), (1,2,20), (1,3,2), (2,6,2)]

Я хочу изменить B как [(2,6,2)]

Я пробовал B = set(B) - set(A), но это не работает. Любая помощь?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Устанавливает работу со значением, а не с префиксами, поэтому set(B) - set(A) даже не близко.

Давайте подумаем об этом шаг за шагом: перебираем B и отфильтровываем любой элемент с префиксом, равным к предмету в A. В качестве понимания списка это будет выглядеть так:

[y for y in B if not any(x == y[:len(x)] for x in A)]

Если элементы в A всегда будут иметь длину 2, вы можете упростить:

[y for y in B if y[:2] not in A]
1 голос
/ 25 апреля 2020

Вы можете использовать:

a = [(1,2), (1,3), (1,5)]
b = [(1,2,10), (1,2,20), (1,3,2), (2,6,2)]
b = [x for x in b if x[0:2] not in a]
# [(2, 6, 2)]

Демо

...