Получить дополнение трех списков - PullRequest
1 голос
/ 05 марта 2019

У меня есть три списка:
a = [1, 2, 3, 4] b = [2, 3, 4, 5] c = [3, 4, 5, 6]

Моя цель - получить все значения, которых нет во всех трех списках: [1,2,5,6]
По сути, я ищу "отрицание "set(a) & set(b) & set(c).

Было бы желательно эффективное решение, так как списки очень длинные.

1 Ответ

3 голосов
/ 05 марта 2019

Противоположность set(a) & set(b) & set(c) уже объяснена в этом вопросе , как указано Chris_Rands в комментариях:

>>> (set(a) | set(b) | set(c)) - (set(a) & set(b) & set(c))
{1, 2, 5, 6}

Для действительно длинных списков, используяNumpy должен быть эффективным:

import numpy as np
from functools import reduce

a = [1, 2, 3, 4]
b = [2, 3, 4, 5]
c = [3, 4, 5, 6]

union = reduce(numpy.union1d, (a,b,c))
intersect = reduce(numpy.intersect1d, (a,b,c))
print(numpy.setdiff1d(union, intersect))

Вывод:

[1 2 5 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...