← Маршрут ML-инженерии

Урок · 2 мин чтения · упражнения и самопроверка

Коллекции

После урока: объяснить списки и выполнить упражнение «Подсчитать частоты и удалить повторения», обосновав выбранный подход..

Перед началом

Когда одного значения мало

Список list хранит упорядоченные элементы и допускает изменение. Индексы начинаются с нуля: у списка из n элементов допустимы 0 ... n - 1. append добавляет элемент в конец; len возвращает длину. Чтение через неверный индекс приводит к IndexError. Пустой список допустим, но у него нет первого элемента.

Кортеж tuple хранит последовательность, состав которой нельзя изменять. Множество set хранит уникальные значения, не обещая порядок обхода. Словарь dict сопоставляет ключу значение. Это разные контракты: не заменяйте список множеством, если повторы или порядок имеют значение.

Частоты

Для подсчёта повторений ключом словаря будет элемент, а значением — число встреч. counts.get(x, 0) возвращает прежнее число или ноль для отсутствующего ключа. После каждой обработки увеличьте его на один. В конце сумма всех частот должна равняться длине исходной последовательности — это полезная проверка.

Поиск в словаре и множестве обычно занимает ожидаемое O(1), но это не гарантия постоянного времени для любой операции и любого набора ключей. Проход списка линейный. Удаление первого элемента списка требует сдвигов; для очереди позже используйте deque.

Копия и общий объект

b = a связывает два имени с одним списком. b.append(7) изменит объект, видимый через a. b = a.copy() создаёт новый внешний список; вложенные изменяемые объекты при поверхностном копировании остаются общими. Для матрицы не пишите [[0] * m] * n: строки будут ссылаться на один список. Используйте отдельное создание каждой строки.

Сначала выберите, нужны ли порядок, повторения и поиск по ключу. Затем выберите коллекцию и проверьте пустой вход.

Пошаговый пример

python
values = [4, 2, 4, 2, 4]
counts = {}
for value in values:
    counts[value] = counts.get(value, 0) + 1
for value in sorted(counts):
    print(value, counts[value])

Ожидаемый вывод

text
2 2
4 3

Счётчик 4 растёт до 3, счётчик 2 — до 2. sorted задаёт воспроизводимый порядок вывода.

Сделайте самостоятельно

Подсчитайте частоты слов в списке ["code", "read", "code"]. Выведите ключи в лексикографическом порядке.

Ответ и критерии проверки

Словарь должен содержать code: 2 и read: 1. Обход sorted(counts) задаёт строки code 2 и read 1. Пустой список должен дать пустой словарь и не падать.

Закрепите задачами

  1. Сумма за один проход

Зачёт требует отправки на проверку. Ответы самопроверки не засчитывают эти задачи.

Проверьте понимание

1. Что делает b = a для списка?
2. Как сохранить уникальные значения, если порядок не нужен?