Возможно ли использование Python-Set-Compression с операциями над множествами?
Это мой код
s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
s |= x
Возвращается set([1, 2, 3, 4, 5])
,
Можно ли использовать заданное понимание в таком случае? Как я могу написать это короче?
2 ответа
Опция 1set.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
для объекта множества (а не класса) ни один из аргументов не должен быть множеством.
Вариант 2functools.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_}