Возможно ли использование Python-Set-Compression с операциями над множествами?

Это мой код

s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
    s |= x

Возвращается set([1, 2, 3, 4, 5]),

Можно ли использовать заданное понимание в таком случае? Как я могу написать это короче?

2 ответа

Опция 1
set.union
Зачем вам вообще нужна петля? использование set.unionпозволяет вычислять объединение более двух наборов (контейнеров) одновременно.

>>> set.union(*[{1,2}, {3,4}, {5,1}])
{1, 2, 3, 4, 5}

Я говорю "контейнеры", потому что вторые (и последующие) аргументы вообще не должны быть заданы.

>>> set.union(*[{1,2}, [3,4], [5,1]])
{1, 2, 3, 4, 5}

Первое, однако, должно быть. С другой стороны,

>>> set().union(*[[1,2], [3,4], [5,1]])
{1, 2, 3, 4, 5}

При звонке union для объекта множества (а не класса) ни один из аргументов не должен быть множеством.


Вариант 2
functools.reduce
Если это не по вкусу, есть reduce также.

>>> from functools import reduce
>>> reduce(set.union, [{1,2}, {3,4}, {5,1}])
{1, 2, 3, 4, 5}

Это выполняет парное сокращение, накапливая результат. Однако не так хорошо, как первый вариант.

Если вы действительно хотите установить понимание здесь:

lst = [{1,2}, {3,4}, {5,1}]
{elem for set_ in lst for elem in set_}
Другие вопросы по тегам