Выбор правильной структуры данных — одно из ключевых решений при написании программы. Неправильный выбор может замедлить код в десятки раз. Разберём четыре основные встроенные структуры Python и научимся выбирать нужную.
Список (list)
Список — упорядоченная изменяемая последовательность. Самая универсальная структура Python.
nums = [3, 1, 4, 1, 5, 9] # Базовые операции — O(1) в конец, O(n) в начало nums.append(2) # добавить в конец nums.insert(0, 0) # вставить в позицию 0 nums.pop() # удалить последний # List comprehension — мощный инструмент squares = [x**2 for x in range(10) if x % 2 == 0] # [0, 4, 16, 36, 64]
Словарь (dict)
Словарь — отображение ключ → значение. Поиск и вставка — O(1). Используйте когда нужен быстрый доступ по ключу.
user = {"name": "Alice", "age": 28}
# Безопасное получение значения
email = user.get("email", "не указан")
# Dict comprehension
word_count = {word: len(word) for word in ["cat", "python"]}
# {'cat': 3, 'python': 6}
# Подсчёт элементов
from collections import Counter
c = Counter(["a", "b", "a", "c", "a"])
# Counter({'a': 3, 'b': 1, 'c': 1})
// Когда что использовать
List — упорядоченные данные, нужен индекс. Dict — быстрый поиск по ключу. Set — уникальность элементов, быстрая проверка принадлежности. Tuple — неизменяемые данные, ключи в словаре, возврат нескольких значений.
Множество (set)
Set — неупорядоченная коллекция уникальных элементов. Проверка «есть ли элемент в set» — O(1) vs O(n) для list.
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a & b) # пересечение: {3, 4}
print(a | b) # объединение: {1,2,3,4,5,6}
print(a - b) # разность: {1, 2}
# Убрать дубликаты из списка
lst = [1, 2, 2, 3, 3, 3]
unique = list(set(lst)) # [1, 2, 3]
Кортеж (tuple)
Tuple — неизменяемая последовательность. Чуть быстрее list, используется для неизменяемых наборов данных.
# Координаты — классический случай для tuple point = (3, 7) x, y = point # unpacking # Функция, возвращающая несколько значений def min_max(lst): return min(lst), max(lst) lo, hi = min_max([3, 1, 4, 1, 5]) # lo=1, hi=5