Предположим, что у меня есть список наборов, и я хочу получить объединение по всем наборам в этом списке. Есть ли способ сделать это, используя выражение генератора? Другими словами, как я могу создать объединение по всем наборам в этом списке непосредственно как frozenset
?
Как создать объединение множества множеств с использованием выражения генератора?
Ответ 1
Просто используйте метод .union()
.
>>> l = [set([1,2,3]), set([4,5,6]), set([1,4,9])]
>>> frozenset().union(*l)
frozenset([1, 2, 3, 4, 5, 6, 9])
Это работает для любых итераций итераций.
Ответ 2
Я предполагаю, что то, что вы пытаетесь избежать, - это промежуточные творения объектов frozenset, когда вы создаете союз?
Вот один из способов сделать это. ПРИМЕЧАНИЕ: это первоначально использовалось itertools.chain()
, но, как замечает Кенни, приведенная ниже версия немного лучше:
import itertools
def mkunion(*args):
return frozenset(itertools.chain.from_iterable(args))
Выполните следующие действия:
a = set(['a','b','c'])
b = set(['a','e','f'])
c = mkunion(a,b) # => frozenset(['a', 'c', 'b', 'e', 'f'])
Ответ 3
Вложенное выражение генератора. Но я думаю, что они немного загадочны, поэтому предложенный KennyTM может быть более ясным.
frozenset(some_item for some_set in some_sets for some_item in some_set)