Выбор правильной структуры данных — одно из ключевых решений при написании программы. Неправильный выбор может замедлить код в десятки раз. Разберём четыре основные встроенные структуры Python и научимся выбирать нужную.

Список (list)

Список — упорядоченная изменяемая последовательность. Самая универсальная структура Python.

# lists.py
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). Используйте когда нужен быстрый доступ по ключу.

# dicts.py
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})
Структуры данных Python

// Когда что использовать

List — упорядоченные данные, нужен индекс. Dict — быстрый поиск по ключу. Set — уникальность элементов, быстрая проверка принадлежности. Tuple — неизменяемые данные, ключи в словаре, возврат нескольких значений.

Множество (set)

Set — неупорядоченная коллекция уникальных элементов. Проверка «есть ли элемент в set» — O(1) vs O(n) для list.

# sets.py
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, используется для неизменяемых наборов данных.

# tuples.py
# Координаты — классический случай для 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
Python код и структуры данных