Это мой код.
s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
s |= x
Возвращает set([1, 2, 3, 4, 5])
.
Можно ли в таком случае использовать понимание множества? Как мне написать короче?
Это мой код.
s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
s |= x
Возвращает set([1, 2, 3, 4, 5])
.
Можно ли в таком случае использовать понимание множества? Как мне написать короче?
set.union
set.union(*[{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}
Зачем вообще нужна петля? Используйте 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}
При вызове union
для заданного объекта (а не класса) ни один из аргументов не должен быть установлен.
functools.reduce
from functools import reduce
reduce(set.union, [{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}
Выполняется попарное сокращение с накоплением результата. Однако не так хорошо, как первый вариант.
{1, 2}.union(*[[3,4], [5,1]])
вы также можете использовать set().union(*[{1,2}, [3,4], [5,1]])
.
- person Aran-Fey; 13.04.2018
Если вы действительно хотите установить здесь понимание:
lst = [{1,2}, {3,4}, {5,1}]
{elem for set_ in lst for elem in set_}