Video Thumbnail

Python.01.07 Встроенные типы: set, frozenset, None

Программирование на Python08:35
https://www.youtube.com/watch?v=v2Jv1TcRbA4

Содержание

Краткое резюме

  • Множества (set) в Python — коллекции уникальных элементов без порядка.
  • Для создания пустого множества нужно использовать конструктор, а не пустые фигурные скобки.
  • В множества можно добавлять только хэшируемые (immutable) типы данных, списки и другие множества недопустимы.
  • С множествами доступны стандартные теоретико-множественные операции: объединение, пересечение, разность.
  • Существует неизменяемый аналог множества — frozenset.
  • Словари (dict) — структуры данных, хранящие пары «ключ: значение», где ключи — уникальны и должны быть хэшируемыми.
  • Для перебора словаря удобно использовать методы keys(), values() и items().
  • Значения словаря могут быть любыми типами, включая изменяемые.
  • Объект None используется в Python для возвращения «ничего» — ситуаций, когда функция не возвращает конкретных значений.

Множества (set) в Python 🌐

Множество — это неупорядоченный набор уникальных элементов. Для создания множества перечисляют элементы в фигурных скобках:

my_set = {1, 2, 3}

Особенности множества:

  • Элементы не повторяются.
  • Порядок элементов не сохраняется. Если вывести множество несколько раз, порядок элементов может отличаться.
  • В множество можно помещать только хэшируемые типы, такие как int, float, str, tuple и другие неизменяемые объекты.

Пример:

my_set = {1, "hello", 3.14, (1, 2)}

Однако нельзя положить в множество изменяемые типы, например список или другое множество:

my_set.add([1, 2])  # Ошибка TypeError: unhashable type: 'list'
my_set.add({1, 2})  # Ошибка TypeError

Как создать пустое множество?

Пустые фигурные скобки {} создают словарь, а не множество. Пустое множество создаётся с помощью конструктора:

empty_set = set()

Операции с множествами

С множествами можно выполнять основные теоретико-множественные операции:

  • Добавление элемента: add()
  • Удаление элемента: remove() или discard()
  • Объединение: union() или оператор |
  • Пересечение: intersection() или оператор &
  • Разность: difference() или оператор -
  • Проверка принадлежности элемента: in
  • Проверка подмножества и надмножества: issubset(), issuperset()

Неизменяемое множество — frozenset ❄️

frozenset — это неизменяемый (immutable) вариант множества, который создаётся через конструктор и может содержаться в других множествах:

fs = frozenset({1, 2, 3})

По элементам set и frozenset можно итерироваться в цикле for:

for element in my_set:
    print(element)

Словари (dict) — ассоциативные массивы и хэш-таблицы 🗂️

Словарь — это структура, которая хранит пары ключ-значение. Форма записи:

my_dict = {"ключ1": "значение1", "ключ2": "значение2"}

Особенности словарей:

  • Ключи уникальны.
  • Ключи должны быть хэшируемыми (например, str, int, tuple).
  • Значения могут быть любого типа, включая изменяемые (списки, другие словари и т.д.).

Чтобы обратиться к значению по ключу, используют квадратные скобки с ключом:

value = my_dict["ключ1"]

Словари являются изменяемым типом, поэтому для ключа можно менять значение:

my_dict["ключ1"] = "новое значение"

Перебор словаря

При переборе словаря циклом for перебираются только ключи:

for key in my_dict:
    print(key)

Чтобы вывести и ключи и значения, используют метод .items():

for key, value in my_dict.items():
    print(key, value)

Методы словаря:

  • keys() — возвращает только ключи,
  • values() — возвращает только значения,
  • items() — возвращает пары (ключ, значение).

Хэшируемость и ошибки

Ключи словаря и элементы множества должны быть хэшируемыми объектами (hashable). Попытка использовать изменяемые объекты (например, список) в таких местах приведёт к ошибке:

hash([1, 2])  # TypeError: unhashable type: 'list'

Поэтому правильнее говорить, что в множествах и словарях могут храниться только хэшируемые типы данных.


Объект None — значение "ничего" ⚪

В Python все функции должны возвращать значение. Иногда функция «ничего не возвращает» конкретно — для этого используется объект None.

Он обозначает отсутствие значения и часто применяется, когда функция выполняет действия, но не даёт результата.

def my_function():
    print("Действие выполнено")
    return None  # можно опустить, Python вернёт None по умолчанию

«Объект None используется, когда нужно вернуть "ничего" — пустое значение без конкретной информации.»


Таким образом, множества и словари — ключевые структуры данных в Python, основанные на хэшировании, с чёткими правилами выбора элементов и способов работы с ними. Понимание этих понятий позволит более эффективно писать и оптимизировать код.