Списки
Чему вы научитесь:
- хранить ряд значений в списке, читать элементы по индексу и обходить их циклом;
- добавлять, убирать и сортировать элементы методами списка;
- отличать второе имя того же списка от его копии;
- строить таблицы из вложенных списков и не попадаться на список в значении по умолчанию.

Представьте игрушечный поезд с табличкой scores на паровозе. За паровозом едут пять вагонов, и в каждом лежит плитка с оценкой за контрольную: 5, 4, 3, 5 и 4. В конце пути стоит табличка с суммой всех плиток — 21.
Без поезда оценки пришлось бы хранить в пяти отдельных переменных. Тогда сумма перечисляет пять имён, а цикл не может обойти их по очереди. Для ряда значений в Python есть список — упорядоченный набор объектов. Его записывают в квадратных скобках через запятую:
scores = [5, 4, 3, 5, 4]
print(scores) # [5, 4, 3, 5, 4]
print(len(scores)) # 5
print(scores[0], scores[-1]) # 5 4
total = 0
for score in scores:
total += score
print(total) # 21Давайте разберём программу по строкам:
scores = [5, 4, 3, 5, 4]собирает поезд из пяти вагонов и связывает с ним имяscores.print(scores)печатает весь список вместе со скобками.len(scores)считает вагоны: их5.scores[0]иscores[-1]берут первый и последний вагон:5и4.- Цикл
forедет вдоль поезда и прибавляет каждую плитку кtotal. - Последний
printпоказывает табличку в конце пути:21.
Элементы и индексы
Каждое значение в списке называют элементом. Вагоны нумеруются так же, как символы строки: первый — scores[0], последний — scores[-1]. Функция len возвращает число элементов.
Что ещё работает так же, как у строки:
- цикл
forперебирает элементы по порядку, от первого к последнему; - индекс за концом списка останавливает программу:
scores[5]даёт ошибкуIndexError: list index out of range; - пустой список
[]в условии ложный, как пустая строка.
Список можно изменить
Строку изменить нельзя, а список — изменяемый объект. В поезде можно заменить плитку в любом вагоне или прицепить новые вагоны, и это будет всё тот же поезд. Присваивание по индексу заменяет элемент, и программа дальше работает с тем же списком:
names = ["Ann", "Bob", "Kim"]
names[1] = "Max"
print(names) # ['Ann', 'Max', 'Kim']
print("Bob" in names, "Kim" in names) # False True
names += ["Lee", "Zoe"]
print(names[2:]) # ['Kim', 'Lee', 'Zoe']
print(len(names)) # 5Разберём пример по шагам:
names[1] = "Max"заменяет второй элемент: вместо'Bob'теперь'Max'.print(names)показывает строки внутри списка в одинарных кавычках. Так в выводе видно, что'5'— строка, а5— число.- Оператор
inпроверяет, есть ли значение среди элементов:'Bob'больше нет, а'Kim'есть. names += ["Lee", "Zoe"]прицепляет в конец два новых элемента.- Срез
names[2:]работает так же, как срез строки: он даёт новый список, а самnamesне меняется. len(names)теперь возвращает5.
Этот вопрос часто задают на собеседовании: «Чем список отличается от строки?» Главное отличие — изменяемость. Элемент списка можно заменить на месте, а любая операция над строкой строит новую строку.
Плюс и плюс-равно
Для списков a += b — не то же, что a = a + b. Разница в том, что происходит с самим списком.
Запись a += b
Она дописывает элементы b в конец того же списка a. Поезд остаётся прежним, к нему прицепляют новые вагоны. Так в примере выше вырос список names.
Запись a = a + b
Оператор + между двумя списками, как и между строками, строит новый список: [1, 2] + [3] — это [1, 2, 3]. Затем присваивание связывает имя a с этим новым списком. Старый список при этом не меняется.
Пока у списка одно имя, на экране обе записи дают одинаковый результат.
Разные типы в одном списке
Элементы одного списка могут быть разных типов: [1, "two", 3.0, None]. Здесь аналогия с поездом заканчивается: у настоящего состава вагоны обычно одного вида, а в список можно положить объекты любых типов вперемешку. На практике в списке всё же хранят значения одного типа, чтобы цикл обрабатывал их одинаково.
Частая ошибка
Новый элемент записали по индексу за концом списка:
nums = [10, 20, 30]
nums[3] = 40 # ✗IndexError: list assignment index out of rangeПрисваивание по индексу заменяет вагон, который уже есть, но новый не прицепляет. В списке из трёх элементов последний индекс — 2, поэтому элемента nums[3] нет. Чтобы добавить элемент в конец, напишите nums += [40].
Главное
- Список — упорядоченный изменяемый набор объектов в квадратных скобках:
[5, 4, 3, 5, 4]. - Индексы,
len, срезы и циклforработают со списком так же, как со строкой. - Присваивание по индексу заменяет существующий элемент, а за концом списка даёт
IndexError. a += bдописывает элементы в тот же список, аa + bстроит новый.
Подпишись, чтобы пройти курс
Курс бесплатный. Войди через Telegram и подпишись на канал — откроются все уроки.