Списки в Python: как хранить много значений
Автор: Казачкин Даниил Михайлович · Обновлено
Список хранит упорядоченную последовательность элементов и допускает изменение после создания. Элементы разделяются запятыми внутри квадратных скобок; длину показывает len, а…
Список хранит упорядоченную последовательность элементов и допускает изменение после создания. Элементы разделяются запятыми внутри квадратных скобок; длину показывает len, а доступ по индексу работает так же, как у строки.
Изменяемая коллекция
scores = [4, 3, 5]
scores[1] = 4
scores.append(5)
print(scores)
print(len(scores))Результат:
[4, 4, 5, 5]
4Присваивание по индексу заменяет второй элемент, append добавляет новый в конец. Порядок и повторы сохраняются.
Копия и второе имя
Запись backup = scores не копирует список: обе переменные указывают на один объект, и изменение через одну видно через другую. Для поверхностной копии используйте scores.copy() или scores[:]. Это особенно важно при сохранении состояния до эксперимента.
Индекс за границей вызывает IndexError. Пустой список не имеет элемента 0. Смешивать типы Python разрешает, но учебные данные одного смысла лучше хранить однородно — так сравнения и вычисления предсказуемее.
Оператор in проверяет наличие значения, а not in — отсутствие. Он не сообщает позицию и для длинного обычного списка выполняет последовательный поиск.
Журнал температур
Создайте список [18, 21, 19]. Замените ошибочное первое значение на 20, добавьте 23 и выведите первый, последний элементы и длину. Сделайте копию до изменений и покажите оба списка. Затем проверьте наличие числа 21. Для пустого списка напишите условие, которое не обращается к индексам. Объясните, почему присваивание второй переменной без copy не подходит для архива.
Ссылочная модель списка
Создайте original, alias = original и copy = original.copy(). Добавьте элемент через alias и предскажите содержимое всех трёх переменных. Затем измените вложенный список и выясните ограничение поверхностной копии. Нарисуйте простую схему стрелок от имён к объектам. Для двумерных данных попробуйте copy.deepcopy и объясните, почему он нужен не всегда. Упражнение должно закончиться практическим решением: когда требуется архив неизменяемых чисел, достаточно обычной копии; когда элементы сами изменяемы, контракт копирования нужно выбирать осознанно.
Практикум: изменяемый список без общей ссылки
Создайте список покупок, добавьте элемент, замените значение по индексу и удалите выбранный товар. После каждого действия записывайте ожидаемую длину. Затем выполните backup = items, измените items и объясните, почему резервная переменная тоже показывает изменение. Исправьте через копию и подтвердите независимость. Проверьте обращение к первому, последнему и отсутствующему индексу. До удаления решите, работаете ли вы со значением или позицией: remove и pop имеют разные контракты.
Контрольная точка
Что хранится в двух переменных после простого присваивания списка? Нарисуйте один объект и две ссылки, затем сравните с поверхностной копией для плоского списка.
Частые вопросы
Почему список можно изменить, а строку нельзя?
Список — изменяемый объект: его элементы можно заменить на месте. Строка неизменяема, поэтому операции над ней создают новое значение. Это различие влияет на передачу объектов и копирование.