Python множества (set, frozenset): Уроки для новичков

Множества в Python — неупорядоченные коллекции уникальных элементов. Рассмотрим типы set и frozenset.

Что такое множества и зачем они нужны?

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

  • Удаления дубликатов из списка. Например, строку с хобби пользователя, разделённую символами, легко преобразовать в множество для автоматического удаления повторов. Это быстрее, чем писать собственный цикл поиска и удаления дубликатов.
  • Получения уникальных значений из последовательности.
  • Быстрой случайной перестановки элементов.

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

Множества создаются двумя способами:

  1. Функция set(): Принимает итерируемый объект (список, строку) и возвращает множество с уникальными элементами.

    my_set = set("hello")
    print(my_set)  # Выведет {'h', 'e', 'l', 'o'}

    Удобно для быстрого преобразования списков в множества с удалением дубликатов.

  2. Фигурные скобки {}: Создают множество напрямую. Важно: пары «ключ: значение» создают словарь, а только значения — множество.

    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 для работы с уникальными элементами и эффективного удаления дубликатов. Выбор между ними зависит от необходимости изменяемого или неизменяемого множества.

Что будем искать? Например,программа