Предположим, что S
и T
назначены наборы. Без использования оператора соединения |
, как я могу найти объединение двух наборов? Это, например, находит пересечение:
S = {1, 2, 3, 4}
T = {3, 4, 5, 6}
S_intersect_T = { i for i in S if i in T }
Так как же найти объединение двух множеств в одной строке без использования |
?
|
?|
?def apply_set_operation(a, b, set_operation)
. При вызове этой функции, я бы предпочел ,apply_set_operation(a, b, set.union)
чтобыapply_set_operation(a, b, set.__or__)
Ответы:
Вы можете использовать метод объединения для наборов:
set.union(other_set)
Обратите внимание, что он возвращает новый набор, т.е. он не меняет себя.
источник
|
можно изменить встроенную переменную:set_a |= set_b
set_a = set_a.union(set_b)
. Если вы имеете в виду «на месте», ни один из них не сделает этого, оба создадут новоеset
a = set((1, 2, 3,)); b = set((1, 3, 4,)); id_a = id(a); a |= b; assert id_a == id(a)
@jorgenkg является правым - переменнаяa
изменяется внутри строки . Я что-то упускаю?a = set((1, 2, 3,)); b = set((1, 3, 4,)); c = a; a |= b; assert id(c) == id(a)
. Даже если быa
был разрушен,c
не был бы. Кроме того,c
сейчасset([1, 2, 3, 4])
, поэтому комментарий @ jorgenkg является правильным.Вы можете использовать
or_
псевдоним:источник
Если вы можете изменить исходный набор (что может потребоваться в некоторых случаях), вы можете использовать
set.update()
:Возвращаемое значение есть
None
, ноS
будет обновлено, чтобы быть объединением оригиналаS
иT
.источник
Предполагая, что вы также не можете использовать
s.union(t)
, что эквивалентноs | t
, вы можете попробоватьИли, если вы хотите понимания,
источник
Если под словом присоединиться вы подразумеваете союз, попробуйте это:
Это что-то вроде хака, но я не могу придумать лучшего лайнера для этого.
источник
list
иset
встроены в функции PythonПредположим, у вас есть 2 списка
так что вы можете найти
A
Союз,B
как следуеттакже, если вы хотите найти пересечение и не пересечение, вы делаете это следующим образом
источник
Вы можете просто распаковать оба набора в один так:
*
Распаковывает набор. Распаковка - это когда итерация (например, набор или список) представляется как каждый элемент, который она дает. Это означает, что приведенный выше пример упрощает,{1, 2, 3, 4, 3, 4, 5, 6}
а затем упрощает,{1, 2, 3, 4, 5, 6}
потому что набор может содержать только уникальные элементы.источник
*
в строке 3?Вы можете сделать
union
или простое понимание спискаА будет иметь все элементы Б
источник