W3docs

Методы множеств Python – Полный справочник с примерами

Полный справочник по методам множеств Python: union, intersection, difference, update, add, remove, discard, copy, isdisjoint и другие с примерами.

Множества в Python — это неупорядоченные коллекции уникальных хешируемых элементов. Поскольку множества реализуют математическое понятие множества, они поставляются с богатым набором встроенных методов для объединения, сравнения и изменения. В этой главе рассматриваются все встроенные методы множеств с понятными примерами, ожидаемыми результатами и рекомендациями по выбору подходящего метода.

Если вы только знакомитесь с множествами, сначала прочитайте Множества Python, чтобы понять, как создаются множества и чем они отличаются от списков и кортежей.

Создание множеств

Используйте фигурные скобки {} или конструктор set() для создания множества. Конструктор также принимает любой итерируемый объект — список, кортеж или строку — и автоматически удаляет дубликаты.

fruits = {'apple', 'banana', 'cherry'}
colors = set(['red', 'green', 'blue'])   # from a list
vowels = set('aeiou')                    # from a string → {'a', 'e', 'i', 'o', 'u'}

empty = set()   # NOT {} — that creates an empty dict

Множества неупорядочены: порядок вывода элементов может отличаться между запусками и версиями Python.

Методы операций над множествами

Эти методы объединяют или сравнивают два и более множества, не изменяя исходные.

union()

union(*others) возвращает новое множество, содержащее каждый элемент, присутствующий в текущем множестве или в любом из others.

python— editable, runs on the server

Оператор | является эквивалентным сокращением для двух множеств: A | B.

Когда использовать: объединение нескольких коллекций с одновременным удалением дубликатов.

intersection()

intersection(*others) возвращает новое множество, содержащее только элементы, которые присутствуют в текущем множестве и в каждом из others.

python— editable, runs on the server

Оператор & является сокращением для двух множеств: A & B.

Когда использовать: поиск общих элементов — например, пользователей, которые кликнули и по объявлению A, и по объявлению B.

difference()

difference(*others) возвращает новое множество элементов, которые есть в текущем множестве, но отсутствуют в любом из others.

python— editable, runs on the server

Оператор - является сокращением: A - B.

Когда использовать: исключение одной группы из другой — например, поиск товаров, которые есть в наличии, но ещё не отгружены.

symmetric_difference()

symmetric_difference(other) возвращает новое множество элементов, которые присутствуют ровно в одном из двух множеств — элементы, которые не являются общими.

python— editable, runs on the server

Оператор ^ является сокращением: A ^ B.

Когда использовать: обнаружение изменений между двумя снимками состояния — например, файлы, добавленные или удалённые между двумя листингами директории.

issubset()

issubset(other) возвращает True, если каждый элемент текущего множества также содержится в other.

python— editable, runs on the server

Оператор <= является эквивалентом; используйте < для проверки строгого подмножества (A меньше B и полностью содержится в нём).

issuperset()

issuperset(other) возвращает True, если текущее множество содержит каждый элемент из other.

A = {1, 2, 3, 4, 5}
B = {2, 3}

print(A.issuperset(B))   # True
print(B.issuperset(A))   # False

Оператор >= является эквивалентом; используйте > для проверки строгого надмножества.

isdisjoint()

isdisjoint(other) возвращает True, если два множества не имеют общих элементов — их пересечение пусто.

A = {1, 2, 3}
B = {4, 5, 6}
C = {3, 4, 5}

print(A.isdisjoint(B))   # True  — no overlap
print(A.isdisjoint(C))   # False — 3 is in both

Когда использовать: проверка непересекающихся категорий, проверка того, что два набора разрешений являются взаимоисключающими.

Методы изменения на месте

Эти методы изменяют множество на месте и возвращают None — они не создают новое множество.

update()

update(*others) добавляет все элементы из одного или нескольких итерируемых объектов в текущее множество, игнорируя дубликаты.

python— editable, runs on the server

update() принимает любой итерируемый объект, не только другое множество — список, кортеж или строка тоже подойдут. Оператор |= является сокращением для двух множеств.

intersection_update()

intersection_update(*others) оставляет только те элементы, которые также присутствуют в каждом из others, отбрасывая всё остальное.

A = {1, 2, 3, 4}
B = {2, 3, 4, 5}

A.intersection_update(B)
print(A)   # {2, 3, 4}

Оператор &= является сокращением.

difference_update()

difference_update(*others) удаляет из текущего множества каждый элемент, присутствующий в любом из others.

A = {1, 2, 3, 4}
B = {3, 4, 5}

A.difference_update(B)
print(A)   # {1, 2}

Оператор -= является сокращением.

symmetric_difference_update()

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

A = {1, 2, 3}
B = {2, 3, 4}

A.symmetric_difference_update(B)
print(A)   # {1, 4}

Оператор ^= является сокращением.

Методы работы с элементами

add()

add(elem) вставляет elem в множество. Если elem уже присутствует, множество не изменяется.

python— editable, runs on the server

Смотрите Добавление элементов в множество для получения дополнительных способов заполнения множества.

remove()

remove(elem) удаляет elem из множества. Вызывает KeyError, если elem отсутствует.

python— editable, runs on the server

Используйте remove(), когда элемент обязан быть в множестве и его неожиданное отсутствие является программной ошибкой, которую стоит отобразить.

discard()

discard(elem) удаляет elem из множества. Не вызывает ошибку, если elem отсутствует.

python— editable, runs on the server

Используйте discard(), когда элемент может присутствовать или отсутствовать в множестве, и вам просто нужно его убрать.

pop()

pop() удаляет и возвращает произвольный элемент. Поскольку множества неупорядочены, невозможно предсказать, какой элемент будет удалён. Вызывает KeyError, если множество пусто.

python— editable, runs on the server

Смотрите Удаление элементов из множества для сравнения всех подходов к удалению.

clear()

clear() удаляет все элементы, оставляя пустое множество.

python— editable, runs on the server

Обратите внимание, что print(set()) выводит set(), а не {}, чтобы отличить пустое множество от пустого словаря.

copy()

copy() возвращает поверхностную копию множества. Изменение копии не влияет на оригинал.

A = {1, 2, 3}
B = A.copy()

B.add(4)
print(A)   # {1, 2, 3}  — unchanged
print(B)   # {1, 2, 3, 4}

Это важно, потому что простое присваивание (B = A) создаёт вторую ссылку на то же множество — изменения в B затронут и A.

Метод или оператор: что выбрать?

Большинство операций над множествами имеют как форму метода, так и форму оператора:

ОперацияМетодОператор
ОбъединениеA.union(B)A | B
ПересечениеA.intersection(B)A & B
РазностьA.difference(B)A - B
Симметричная разностьA.symmetric_difference(B)A ^ B
Объединение на местеA.update(B)A |= B
Пересечение на местеA.intersection_update(B)A &= B
Разность на местеA.difference_update(B)A -= B
Симм. разность на местеA.symmetric_difference_update(B)A ^= B
ПодмножествоA.issubset(B)A <= B
НадмножествоA.issuperset(B)A >= B

Ключевое отличие: методы принимают любой итерируемый объект в качестве аргумента, тогда как операторы требуют, чтобы обе стороны были множествами. Используйте методы, когда хотите работать со списком или кортежем напрямую, без предварительного преобразования:

tags = {'python', 'web'}
new_tags = ['python', 'ml', 'data']

tags.update(new_tags)         # works — list is fine
# tags |= new_tags            # TypeError — operator needs a set
print(tags)   # {'python', 'web', 'ml', 'data'}

Полный справочник методов множеств

МетодОписание
add(elem)Добавляет elem в множество; не имеет эффекта, если уже присутствует.
clear()Удаляет все элементы, оставляя пустое множество.
copy()Возвращает поверхностную копию множества.
difference(*others)Возвращает новое множество с элементами, отсутствующими в любом из others.
difference_update(*others)Удаляет из множества все элементы, найденные в others.
discard(elem)Удаляет elem, если присутствует; не вызывает ошибку при отсутствии.
intersection(*others)Возвращает новое множество элементов, общих для множества и всех others.
intersection_update(*others)Оставляет только элементы, найденные в множестве и всех others.
isdisjoint(other)Возвращает True, если множество и other не имеют общих элементов.
issubset(other)Возвращает True, если каждый элемент множества содержится в other.
issuperset(other)Возвращает True, если множество содержит каждый элемент из other.
pop()Удаляет и возвращает произвольный элемент; вызывает KeyError, если пусто.
remove(elem)Удаляет elem; вызывает KeyError, если отсутствует.
symmetric_difference(other)Возвращает элементы, присутствующие ровно в одном из двух множеств.
symmetric_difference_update(other)Обновляет множество до симметричной разности на месте.
union(*others)Возвращает новое множество со всеми элементами из множества и всех others.
update(*others)Добавляет все элементы из others в множество.

Практика

Практика
Which of the following are methods that can be used on sets in Python?
Which of the following are methods that can be used on sets in Python?
Was this page helpful?