← Назад к вопросам

Какие стандартные коллекции есть в Python?

1.3 Junior🔥 171 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стандартные коллекции Python в контексте Data Engineering

Пython предоставляет мощный набор встроенных и стандартных коллекций, которые я активно использую в повседневной работе data engineer.

Встроенные последовательности

list — самая универсальная коллекция:

  • Упорядоченная, изменяемая
  • Быстрый доступ по индексу O(1)
  • Используется везде: от обработки данных до построения pipelines
  • В контексте дата-обработки — хранение батчей строк перед отправкой в БД

tuple — неизменяемая альтернатива:

  • Можно использовать как ключи в словарях
  • Быстрее list при большом числе операций
  • Идеальна для возврата нескольких значений из функции
  • Hashable — используется в compound keys
# Compound key для де-дупликации
processed_users = set()
for row in data:
    key = (row['user_id'], row['date'])
    if key not in processed_users:
        process(row)
        processed_users.add(key)

Множества (set, frozenset)

set — неупорядоченная коллекция уникальных элементов:

  • Операции: union, intersection, difference — O(1) в среднем
  • Идеальна для де-дупликации: set(data) вместо Loop
  • Проверка принадлежности очень быстрая
  • При работе с идентификаторами (user_ids, session_ids)

frozenset — immutable версия:

  • Можно использовать в качестве ключа dict
  • Для кэширования результатов
# Быстрое пересечение двух наборов ID
active_users = set(df['user_id'])
blocked_users = {'user_123', 'user_456'}
valid_users = active_users - blocked_users

Словари (dict, defaultdict, Counter, OrderedDict)

dict — основная структура для key-value данных:

  • O(1) поиск по ключу
  • Сохранение порядка (Python 3.7+)
  • Используется в парсинге JSON, конфигах

defaultdict — автоматическое инициализирование значений:

from collections import defaultdict

# Группировка с автоматическим созданием списков
user_purchases = defaultdict(list)
for row in sales_data:
    user_purchases[row['user_id']].append(row['amount'])

Counter — подсчёт частоты элементов:

from collections import Counter

# Топ-10 самых частых значений
top_products = Counter(orders['product_id']).most_common(10)

OrderedDict — сейчас менее актуален (dict сохраняет порядок):

  • Раньше использовался для упорядоченных словарей
  • Сейчас используется редко, только для специальных case'ов

Очереди и стеки (deque, heapq)

deque (двусторонняя очередь) — для sliding window алгоритмов:

from collections import deque

# Moving average для streaming данных
window = deque(maxlen=30)  # Последние 30 значений
for value in stream:
    window.append(value)
    avg = sum(window) / len(window)

heapq — приоритетная очередь:

import heapq

# Топ-3 максимума без сортировки всего массива
top_3 = heapq.nlargest(3, data, key=lambda x: x['score'])

namedtuple — структурированные данные

namedtuple — лёгкая альтернатива dataclass для простых структур:

from collections import namedtuple

Event = namedtuple('Event', ['user_id', 'timestamp', 'event_type'])
event = Event(123, '2025-01-01', 'purchase')
print(event.user_id)  # Читаемость

Практическое применение

  • list/tuple: основная работа с данными
  • dict/defaultdict: группировка, mapping
  • set: де-дупликация, быстрый поиск
  • Counter: анализ частотности
  • deque: алгоритмы с окном
  • heapq: топ-K элементов без полной сортировки

Выбор коллекции напрямую влияет на performance pipeline'а: неправильная коллекция может замедлить обработку гигабайт данных в 10 раз.