Продвинутые структуры данных в Python: tuple, set, dict
Неизменяемые кортежи tuple, уникальные множества set, ассоциативные словари dict (пары ключ-значение), хеширование, генераторы list/dict comprehension.
Кортеж (tuple) в языке Python — это упорядоченная НЕИЗМЕНЯЕМАЯ (immutable) коллекция элементов произвольных типов, записываемая в круглых скобках ( ).
Пример создания: point = (10, 25), rgb = (255, 128, 0).
Отличия кортежа от обычного списка (list):
• Неизменяемость: после создания кортежа нельзя добавить, удалить или изменить его элементы (попытка point[0] = 5 вызовет ошибку TypeError);
• Защита от случайного изменения: кортежи гарантируют сохранность константных данных;
• Экономия памяти: кортеж занимает меньше байт в ОЗУ, чем список с тем же числом элементов;
• Высокая скорость: операции с кортежами выполняются быстрее списков;
• Ключи словарей: кортежи могут служить ключами в словарях dict, а списки — нет (так как кортежи хешируемы).
Кортеж (tuple)
Кортеж из 1 элемента
Множество (set) — это изменяемая НЕУПОРЯДОЧЕННАЯ коллекция УНИКАЛЬНЫХ элементов, записываемая в фигурных скобках { }.
Главные свойства множеств:
1. Уникальность: множество автоматически удаляет любые дубликаты! Если написать s = {1, 2, 2, 3, 3, 3}, множество оставит только {1, 2, 3}. Преобразование list(set(a)) — стандартный способ мгновенно убрать все повторы из списка;
2. Неупорядоченность: элементы не имеют индексов (нельзя написать s[0]);
3. Сверхбыстрый поиск O(1): проверка наличия элемента оператором in в множестве из 1 миллиона чисел происходит мгновенно благодаря механизму хеш-таблиц.
Математические операции над множествами:
• Объединение (A | B или A.union(B)) — все элементы обоих множеств;
• Пересечение (A & B или A.intersection(B)) — только общие элементы;
• Разность (A - B) — элементы, которые есть в A, но отсутствуют в B;
• Симметрическая разность (A ^ B) — элементы, принадлежащие только одному из множеств.
Множество (set)
Пересечение (&)
Словарь (dict / ассоциативный массив) — это упорядоченная изменяемая коллекция пар «ключ: значение» (key: value), также записываемая в фигурных скобках { }.
В словарях доступ к данным осуществляется не по числовому номеру-индексу (0, 1, 2), а по уникальному смысловому КЛЮЧУ:
"name": "Азамат",
"age": 16,
"grade": 10,
"city": "Алматы"
}
print(student["name"]) # Выведет: Азамат
Требования к ключам словаря:
• Ключ обязан быть уникальным (при повторении ключа новое значение перезапишет старое);
• Ключ обязан быть неизменяемым типом данных (число int, строка str, кортеж tuple). Список list быть ключом НЕ может!
Основные методы словарей:
• d.keys() — возвращает все ключи;
• d.values() — возвращает все значения;
• d.items() — возвращает пары (ключ, значение) для удобного обхода в цикле for k, v in d.items():;
• d.get(key, default) — безопасное извлечение значения без ошибки KeyError, если ключ отсутствует.
Словарь (dict)
d.get(k, default)
Генераторы (Comprehensions) — элегантный и лаконичный инструмент Python для создания коллекций в одну строчку:
• Генератор списка: squares = [x**2 for x in range(10) if x % 2 == 0]
(список квадратов четных чисел от 0 до 9);
• Генератор словаря: words = ["яблоко", "кот", "информатика"]
lengths = {w: len(w) for w in words} # {'яблоко': 6, 'кот': 3, 'информатика': 11}.
