Я хотел бы получить объединение двух наборов frozensets
. Меня интересует только объединение frozensets
, которые не пересекаются. Другой способ взглянуть на это состоит в том, что меня интересуют только союзы, длина которых равна общей длине как frozensets
в сочетании. В идеале я хотел бы игнорировать любые frozensets
, которые не пересекаются друг с другом для массового ускорения. Я ожидаю, что многие frozensets
будут иметь хотя бы один элемент. Вот код, который у меня есть на python. Я хотел бы, чтобы это было как можно быстрее, поскольку я работаю с большим набором данных. Каждый из frozensets
составляет не более 20 элементов, но в наборе будет около 1 000 сум. Все числа будут от 0 до 100. Я открыт для преобразования в другие типы, если это позволит моей программе работать быстрее, но я не хочу, чтобы повторяющиеся элементы и порядок не были важны.Получите соединение всех наборов, которые не пересекаются более эффективно
sets1 = set([frozenset([1,2,3]),frozenset([4,5,6]),frozenset([8,10,11])])
sets2 = set([frozenset([8,9,10]),frozenset([6,7,3])])
newSets = set()
for fset in sets1:
for fset2 in sets2:
newSet = fset.union(fset2)
if len(newSet) == len(fset)+len(fset2):
newSets.add(frozenset(newSet))
правильный выход
set(frozenset([1,2,3,8,9,10]),frozenset([4,5,6,8,9,10]),frozenset([8,10,11,6,7,3]))
'{s1 | s2 для s1 в наборах1 для s2 в наборах2, если s1.isdisjoint (s2)} ' –