W3docs

Добавление элементов в множество

Как добавлять элементы в множество Python с помощью add() и update(): примеры и советы.

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

Если вы только начинаете знакомство с множествами, сначала прочитайте главу Python Sets. Чтобы узнать, как удалять элементы, смотрите Remove Set Items.

Метод add()

add() вставляет один элемент в множество. Если элемент уже существует, множество не изменяется — ошибка не возникает и дубликат не создаётся.

Синтаксис

set.add(element)
  • element — значение для вставки. Оно должно быть хешируемым (string, число, tuple из хешируемых значений и т. д.). Списки и словари добавить нельзя.
  • Возвращаемое значение: None. Множество изменяется на месте.

Добавление нового элемента

Добавление string в множество

python— editable, runs on the server

Добавление дубликата безопасно

Вызов add() с элементом, который уже присутствует в множестве, ничего не меняет — размер множества остаётся прежним:

Добавление дублирующего элемента в множество

fruits = {'apple', 'banana', 'cherry'}
fruits.add('apple')   # 'apple' is already present
print(fruits)
# {'apple', 'banana', 'cherry'}   (unchanged)

Это одно из наиболее полезных свойств множеств: перед добавлением не нужно проверять, существует ли элемент.

add() принимает только один аргумент

add() принимает ровно один аргумент. Чтобы вставить несколько элементов сразу, используйте update() (см. следующий раздел).

# This raises TypeError: set.add() takes exactly one argument (2 given)
# fruits.add('kiwi', 'mango')

add() требует хешируемый элемент

В множестве могут храниться только хешируемые типы. Списки и словари не являются хешируемыми, поэтому передача их в add() вызывает TypeError:

s = {1, 2, 3}
# s.add([4, 5])  # TypeError: unhashable type: 'list'
# Use a tuple instead:
s.add((4, 5))
print(s)
# {1, 2, 3, (4, 5)}

Метод update()

update() добавляет все элементы из одного или нескольких итерируемых объектов в множество за один вызов. Метод принимает любой итерируемый объект — другое множество, список, tuple или даже string.

Синтаксис

set.update(iterable1, iterable2, ...)
  • Можно передать один или несколько итерируемых объектов.
  • Дубликаты между существующим множеством и новыми элементами молча игнорируются.
  • Возвращаемое значение: None. Множество изменяется на месте.

Добавление элементов из списка

Обновление множества из списка

fruits = {'apple', 'banana'}
fruits.update(['cherry', 'date', 'elderberry'])
print(fruits)
# {'apple', 'banana', 'cherry', 'date', 'elderberry'}

Добавление элементов из другого множества

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

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set1.update(set2)
print(set1)
# {1, 2, 3, 4, 5}

Обратите внимание: update() изменяет set1 на месте, тогда как union() возвращает новое множество, не затрагивая ни одно из исходных.

Добавление из нескольких итерируемых объектов за один раз

Можно передать несколько итерируемых объектов в один вызов update():

Обновление множества из нескольких итерируемых объектов

numbers = {1, 2, 3}
numbers.update([4, 5], {5, 6, 7})
print(numbers)
# {1, 2, 3, 4, 5, 6, 7}

Передача string в update()

Поскольку string является итерируемым объектом, update() разбивает его на отдельные символы. Обычно это нежелательное поведение, поэтому будьте осторожны:

Обновление с помощью string — добавляются отдельные символы

s = {'hello'}
s.update('abc')
print(s)
# {'hello', 'a', 'b', 'c'}   — each character becomes a separate element

Чтобы добавить целую string как один элемент, используйте add().

add() vs update() — Краткое сравнение

add()update()
Количество элементовОдинМного
Тип аргументаОдно хешируемое значениеЛюбой итерируемый объект (список, множество, tuple, …)
Изменяет множество на месте?ДаДа
ВозвращаетNoneNone

Практические примеры

Динамическое построение набора тегов

Распространённый сценарий — накопление уникальных тегов или идентификаторов в процессе работы программы:

Сбор уникальных тегов с помощью множества

tags = set()

# add() for one tag at a time
tags.add('python')
tags.add('tutorial')
tags.add('python')   # duplicate — ignored

print(tags)
# {'python', 'tutorial'}

# update() to add several tags at once
tags.update(['coding', 'beginner', 'tutorial'])
print(tags)
# {'python', 'tutorial', 'coding', 'beginner'}

Удаление дубликатов при накоплении данных

Поскольку add() молча игнорирует дубликаты, множество можно использовать как аккумулятор для дедупликации элементов из нескольких источников:

Дедупликация элементов из двух списков с помощью множества

batch1 = [101, 102, 103, 102]
batch2 = [103, 104, 105]

seen = set()
seen.update(batch1)
seen.update(batch2)

print(sorted(seen))
# [101, 102, 103, 104, 105]

Ключевые моменты

  • Множества хранят только уникальные элементы; add() и update() никогда не создают дубликатов.
  • Множества неупорядочены — порядок вставки не сохраняется и может различаться между запусками.
  • add() вставляет ровно один хешируемый элемент; update() вставляет все элементы из любого количества итерируемых объектов.
  • Оба метода возвращают None и изменяют множество на месте.
  • Чтобы объединить два множества в новое множество, не изменяя ни одно из них, используйте union() (см. Set Methods).

Практика

Практика
What methods in Python can be used to add items into set?
What methods in Python can be used to add items into set?
Was this page helpful?