Множества в Python — неупорядоченные коллекции уникальных элементов. Рассмотрим типы set и frozenset.
Что такое множества и зачем они нужны?
Множества похожи на списки, но с ключевыми отличиями: элементы расположены в случайном порядке, и повторяющиеся элементы не допускаются. Это полезно для:
- Удаления дубликатов из списка. Например, строку с хобби пользователя, разделённую символами, легко преобразовать в множество для автоматического удаления повторов. Это быстрее, чем писать собственный цикл поиска и удаления дубликатов.
- Получения уникальных значений из последовательности.
- Быстрой случайной перестановки элементов.
Создание множеств
Множества создаются двумя способами:
- Функция set(): Принимает итерируемый объект (список, строку) и возвращает множество с уникальными элементами.
my_set = set("hello") print(my_set) # Выведет {'h', 'e', 'l', 'o'}
Удобно для быстрого преобразования списков в множества с удалением дубликатов.
- Фигурные скобки {}: Создают множество напрямую. Важно: пары «ключ: значение» создают словарь, а только значения — множество.
my_set = {1, 2, 2, 3, 4, 4, 5} print(my_set) # Выведет {1, 2, 3, 4, 5}
Работа с множествами
Работа с множествами похожа на работу со списками, но есть ограничения:
- Доступ по индексу: Невозможен. Попытка приведёт к ошибке.
- Изменение элементов: Невозможно напрямую.
Возможные операции:
- Добавление элементов: add() — для одного элемента, update() — для нескольких.
my_set.add(32) my_set.update([6, 7, 8, True]) print(my_set)
- Удаление элементов: remove() (возвращает ошибку, если элемента нет), discard() (не возвращает ошибку, если элемента нет), pop() (удаляет и возвращает произвольный элемент).
my_set.remove(True) my_set.discard(99) # Элемент может отсутствовать my_set.pop() # Удаляет и возвращает произвольный элемент print(my_set)
- Очистка множества: clear().
my_set.clear() print(my_set) # Выведет set()
- Удаление дубликатов из списка:
my_list = [1, 2, 2, 3, 4, 4, 5] new_list = list(set(my_list)) print(new_list) # Выведет [1, 2, 3, 4, 5]
Замороженные множества (frozenset)
frozenset — неизменяемая версия множества. Создаётся функцией frozenset(). Операции изменения (добавление, удаление) недопустимы. Подобно кортежу, но позволяет проверять на вхождение элементов.
new_data = frozenset([1, 2, 2, 3, 4, 4, 5])
print(new_data)
# new_data.add(6) # Вызовет ошибку AttributeError
set и frozenset — мощные инструменты в Python для работы с уникальными элементами и эффективного удаления дубликатов. Выбор между ними зависит от необходимости изменяемого или неизменяемого множества.