Объединение множеств в Python
Все способы объединения множеств в Python: union(), update(), операторы | и |=, а также методы для пересечения, разности и симметричной разности.
Python предоставляет несколько способов объединить два и более множества в одну коллекцию. На этой странице рассмотрены все из них: метод union(), метод update(), их операторные аналоги (| и |=), объединение более двух множеств за один вызов, а также связанные методы для пересечения, разности и симметричной разности на месте.
Быстрое сравнение
| Цель | Метод | Оператор | Изменяет оригинал? |
|---|---|---|---|
| Новое множество со всеми элементами | union() | | | Нет — возвращает новое множество |
| Добавить все элементы на месте | update() | |= | Да |
| Новое множество — только общие элементы | intersection() | & | Нет |
| Оставить только общие элементы | intersection_update() | &= | Да |
| Новое множество — элементы, отсутствующие в другом | difference() | - | Нет |
| Удалить элементы, найденные в другом | difference_update() | -= | Да |
| Новое множество — элементы только в одном из двух | symmetric_difference() | ^ | Нет |
| Оставить элементы только в одном из двух | symmetric_difference_update() | ^= | Да |
Объединение множеств с помощью union()
union() возвращает новое множество, содержащее все уникальные элементы из всех переданных множеств. Исходные множества не изменяются.
Объединение двух множеств в Python
Вывод (порядок может отличаться — множества неупорядочены):
{'apple', 'banana', 'cherry', 'mango', 'orange'}Поскольку set2 уже содержит "banana", результат включает его только один раз. Это определяющее свойство множества: без дубликатов.
Оператор |
Вертикальная черта | — операторный эквивалент union(). Он даёт тот же результат и зачастую лучше читается в выражениях.
set1 = {"apple", "banana", "cherry"}
set2 = {"orange", "banana", "mango"}
set3 = set1 | set2
print(set3)Вывод:
{'apple', 'banana', 'cherry', 'mango', 'orange'}Когда использовать |, а когда union(): используйте | для быстрого, читаемого выражения между двумя множествами. Используйте union(), когда нужно передать любой другой итерируемый объект (например, список или кортеж) напрямую — union() принимает любой итерируемый объект, тогда как | требует, чтобы оба операнда были множествами.
# union() accepts any iterable
set1 = {1, 2, 3}
result = set1.union([4, 5], (6,)) # list and tuple both work
print(result)Вывод:
{1, 2, 3, 4, 5, 6}Объединение множеств с помощью update()
update() добавляет все элементы из одного или нескольких других множеств (или любого итерируемого объекта) в существующее множество. Он изменяет исходное множество на месте и возвращает None.
Обновление множества другим множеством в Python
Вывод:
{'apple', 'banana', 'cherry', 'mango', 'orange'}После этого вызова set1 расширяется и включает все уникальные элементы из set2. Сам set2 остаётся без изменений.
Оператор |=
|= — это оператор на месте, эквивалентный update().
set1 = {"apple", "banana", "cherry"}
set2 = {"orange", "banana", "mango"}
set1 |= set2
print(set1)Вывод:
{'apple', 'banana', 'cherry', 'mango', 'orange'}Объединение более двух множеств за один раз
И union(), и update() принимают несколько аргументов, поэтому можно объединить много множеств в одном вызове.
A = {1, 2, 3}
B = {3, 4, 5}
C = {5, 6, 7}
result = A.union(B, C)
print(result)Вывод:
{1, 2, 3, 4, 5, 6, 7}То же самое относится к update():
A = {1, 2, 3}
B = {3, 4, 5}
C = {5, 6, 7}
A.update(B, C)
print(A)Вывод:
{1, 2, 3, 4, 5, 6, 7}Также можно объединить несколько множеств с помощью цепочки оператора |:
result = {1, 2} | {3, 4} | {5, 6}
print(result)Вывод:
{1, 2, 3, 4, 5, 6}Связанные методы объединения на месте
Тот же принцип «на месте vs. новое множество» применяется ко всем остальным операциям с множествами. Их стоит знать наряду с update().
intersection_update() и &=
Оставляет только элементы, присутствующие во всех указанных множествах.
A = {1, 2, 3, 4}
B = {2, 3, 5}
A.intersection_update(B)
print(A) # only elements in both A and BВывод:
{2, 3}difference_update() и -=
Удаляет каждый элемент, который также присутствует в другом множестве.
A = {1, 2, 3, 4}
B = {2, 4}
A.difference_update(B)
print(A) # elements in A that are not in BВывод:
{1, 3}symmetric_difference_update() и ^=
Оставляет только элементы, присутствующие ровно в одном из двух множеств — элементы, общие для обоих, удаляются.
A = {1, 2, 3}
B = {2, 3, 4}
A.symmetric_difference_update(B)
print(A) # elements in A or B, but not in bothВывод:
{1, 4}union() vs update() — что выбрать?
Используйте union() (или |), когда хотите сохранить исходные множества нетронутыми и работать с объединённым результатом как с отдельным значением. Это правильный выбор внутри выражений, возвращаемых значений функций и везде, где важна неизменяемость.
Используйте update() (или |=), когда вы постепенно наращиваете множество и не нужно сохранять оригинал. Это немного экономит память, поскольку не создаёт лишний объект.
# Reading pattern: create a single combined set from several sources
all_tags = set()
for article in articles:
all_tags.update(article["tags"]) # update() is natural hereСвязанные темы
- Множества в Python — что такое множества, как их создавать и каковы их ключевые свойства
- Добавление элементов в множество — добавление одиночных элементов и массовое добавление
- Удаление элементов из множества —
remove(),discard()иpop() - Доступ к элементам множества — проверка принадлежности и итерация
- Перебор множеств — итерация по элементам множества с помощью
for - Методы множеств — полный справочник по всем встроенным методам множеств