список множеств python находит симметричную разницу во всех элементах - PullRequest
0 голосов
/ 15 мая 2018

Рассмотрим этот список наборов

my_input_list= [
{1,2,3,4,5},
{2,3,7,4,5},
set(),
{1,2,3,4,5,6},
set(),]

Я хочу получить единственные исключительные элементы 6 и 7 в качестве ответа, списка или набора. Установите предпочтительный.

Я пытался print reduce(set.symmetric_difference,my_input_list) но это дает

{2,3,4,5,6,7}

И я попытался отсортировать список по длине, при наименьшем первом возникает ошибка из-за двух пустых наборов. Largest first дает тот же результат, что и несортированный.

Любая помощь или идеи, пожалуйста? Спасибо :)

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы можете использовать itertools.chain и collection.Counter:

from itertools import chain
from collections import Counter

r = {k for k,v in Counter(chain.from_iterable(my_input_list)).items() if v==1}
0 голосов
/ 15 мая 2018

Похоже, самое простое решение - подсчитать все и вернуть элементы, которые появляются только один раз.

Это решение использует chain.from_iterable (чтобы сгладить ваши множества) + Counter (для подсчета вещей).Наконец, используйте понимание набора для фильтрации элементов со счетом == 1.

from itertools import chain
from collections import Counter

c = Counter(chain.from_iterable(my_input_list))
print({k for k in c if c[k] == 1})
{6, 7}

Быстрая заметка;пустой литерал {} используется для обозначения пустого dict, а не set.Для последнего используйте set().

...