Ответ 1
Вы можете использовать метод union для множеств: set.union(other_set)
Обратите внимание, что он возвращает новый набор i.e, он не модифицирует себя.
Предположим, что S
и T
- назначенные наборы. Без использования оператора объединения |
, как я могу найти объединение двух множеств? Это, например, находит пересечение:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
Итак, как я могу найти объединение двух наборов в одной строке без использования |
?
Вы можете использовать метод union для множеств: set.union(other_set)
Обратите внимание, что он возвращает новый набор i.e, он не модифицирует себя.
Извините, почему мы не можем снова использовать оператор объединения?
>>> set([1,2,3]) | set([4,5,6])
set([1, 2, 3, 4, 5, 6])
Вы можете использовать псевдоним or_
:
>>> from operator import or_
>>> from functools import reduce # python3 required
>>> reduce(or_, [{1, 2, 3, 4}, {3, 4, 5, 6}])
set([1, 2, 3, 4, 5, 6])
Предполагая, что вы также не можете использовать s.union(t)
, что эквивалентно s | t
, вы можете попробовать
>>> from itertools import chain
>>> set(chain(s,t))
set([1, 2, 3, 4, 5, 6])
Или, если вы хотите понять,
>>> {i for j in (s,t) for i in j}
set([1, 2, 3, 4, 5, 6])
Если у вас все в порядке с изменением исходного набора (что может потребоваться в некоторых случаях), вы можете использовать set.update()
:
S.update(T)
Возвращаемое значение - None
, но S
будет обновлено, чтобы быть объединением оригинальных S
и T
.
Если по соединению вы имеете в виду объединение, попробуйте следующее:
set(list(s) + list(t))
Это немного взломать, но я не могу придумать лучшего лайнера для этого.
Предположим, у вас есть 2 списка
A = [1,2,3,4]
B = [3,4,5,6]
чтобы найти A
Union B
, как следует
union = set(A).union(set(B))
также, если вы хотите найти пересечение и непересечение, вы делаете это, следуя
intersection = set(A).intersection(set(B))
non_intersection = union - intersection
Вы можете сделать union
или простое понимание списка
[A.add(_) for _ in B]
A будет иметь все элементы B