Как создать объединение множества множеств, используя выражение генератора? - PullRequest
29 голосов
/ 09 августа 2010

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

Ответы [ 3 ]

52 голосов
/ 09 августа 2010

Просто используйте метод .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])

Это работает для любых повторяемых итераций.

6 голосов
/ 09 августа 2010

Я предполагаю, что вы пытаетесь избежать промежуточных созданий объектов 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'])
4 голосов
/ 09 августа 2010

Вложенное выражение генератора. Но я думаю, что они немного загадочны, поэтому способ, предложенный KennyTM, может быть более понятным.

frozenset(some_item for some_set in some_sets for some_item in some_set)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...