Как присоединиться к двум наборам в одной строке без использования "|"

Предположим, что S и T - назначенные наборы. Без использования оператора объединения |, как я могу найти объединение двух множеств? Это, например, находит пересечение:

S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }

Итак, как я могу найти объединение двух наборов в одной строке без использования |?

Ответ 1

Вы можете использовать метод union для множеств: set.union(other_set)

Обратите внимание, что он возвращает новый набор i.e, он не модифицирует себя.

Ответ 2

Извините, почему мы не можем снова использовать оператор объединения?

>>> set([1,2,3]) | set([4,5,6])
set([1, 2, 3, 4, 5, 6])

Ответ 3

Вы можете использовать псевдоним 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])

Ответ 4

Предполагая, что вы также не можете использовать 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])

Ответ 5

Если у вас все в порядке с изменением исходного набора (что может потребоваться в некоторых случаях), вы можете использовать set.update():

S.update(T)

Возвращаемое значение - None, но S будет обновлено, чтобы быть объединением оригинальных S и T.

Ответ 6

Если по соединению вы имеете в виду объединение, попробуйте следующее:

set(list(s) + list(t))

Это немного взломать, но я не могу придумать лучшего лайнера для этого.

Ответ 7

Предположим, у вас есть 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

Ответ 8

Вы можете сделать union или простое понимание списка

[A.add(_) for _ in B]

A будет иметь все элементы B