W3docs

Объединение множеств в Python

Все способы объединения множеств в Python: union(), update(), операторы | и |=, а также методы для пересечения, разности и симметричной разности.

Python предоставляет несколько способов объединить два и более множества в одну коллекцию. На этой странице рассмотрены все из них: метод union(), метод update(), их операторные аналоги (| и |=), объединение более двух множеств за один вызов, а также связанные методы для пересечения, разности и симметричной разности на месте.

Быстрое сравнение

ЦельМетодОператорИзменяет оригинал?
Новое множество со всеми элементамиunion()|Нет — возвращает новое множество
Добавить все элементы на местеupdate()|=Да
Новое множество — только общие элементыintersection()&Нет
Оставить только общие элементыintersection_update()&=Да
Новое множество — элементы, отсутствующие в другомdifference()-Нет
Удалить элементы, найденные в другомdifference_update()-=Да
Новое множество — элементы только в одном из двухsymmetric_difference()^Нет
Оставить элементы только в одном из двухsymmetric_difference_update()^=Да

Объединение множеств с помощью union()

union() возвращает новое множество, содержащее все уникальные элементы из всех переданных множеств. Исходные множества не изменяются.

Объединение двух множеств в Python

python— editable, runs on the server

Вывод (порядок может отличаться — множества неупорядочены):

{'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

python— editable, runs on the server

Вывод:

{'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

Связанные темы

Практика

Практика
Which of the following statements about joining sets in Python are correct?
Which of the following statements about joining sets in Python are correct?
Was this page helpful?