Подтвердить что ты не робот

Как создать объединение множества множеств с использованием выражения генератора?

Предположим, что у меня есть список наборов, и я хочу получить объединение по всем наборам в этом списке. Есть ли способ сделать это, используя выражение генератора? Другими словами, как я могу создать объединение по всем наборам в этом списке непосредственно как frozenset?

4b9b3361

Ответ 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)