Перейти к содержанию

432 уроков, 26 библиотек и челлендж «Что выведет код?» — бесплатно, код прямо в браузере

Начать обучение
Урок 1 из 20 Начальный 15 мин 100 XP

Список в Python: первый список и элементы в квадратных скобках

Три товара — не три переменных, а один список в квадратных скобках. Первый список, чтение элемента по индексу, замена на месте и пустой список для будущей корзины.

Редакция Питоники

Почти любые данные программы — это набор однотипных вещей: товары в корзине, строки отчёта, задачи на день. Хранить каждую вещь в отдельной переменной можно, но уже на третьем товаре такой код начинает трещать, а на тридцатом — разваливается. В Python для наборов есть главная структура — список (list): одна переменная, внутри которой лежит сколько угодно значений. Разберём, как записать первый список, как достать из него элемент по номеру и почему именно со списка начинают почти любой питоновский проект.

Три переменных вместо одного списка

Посмотрим на код, который ещё не знает про списки: каждый товар корзины получает собственную переменную с собственным номером в имени:

товары без списка
item1 = 'хлеб'
item2 = 'молоко'
item3 = 'сыр'
print(item1, item2, item3)
print('товаров: 3 — посчитали глазами')
Вывод
хлеб молоко сыр
товаров: 3 — посчитали глазами

Пока товаров три, код читается. Но каждая новая покупка — новая строка объявления, а ответ на простой вопрос «сколько всего товаров» требует пересчитывать переменные глазами. Ни цикла по таким данным, ни автоматического подсчёта: переменные item1, item2, item3 для Python — три никак не связанных имени.

Первый список: квадратные скобки

Список собирает значения в одну переменную — элементы перечисляются в квадратных скобках через запятую. Тот же набор товаров выглядит теперь так:

корзина как список
cart = ['хлеб', 'молоко', 'сыр']
print(cart)
print(len(cart))
Вывод
['хлеб', 'молоко', 'сыр']
3

Одна переменная cart вместо трёх item-ов. Печать списка показывает все элементы в квадратных скобках, через запятую, строки — в кавычках: так Python изображает список на экране. Функция len отвечает на вопрос «сколько элементов» одной строкой — три. Подробно длина разбирается в уроке про len, а пока достаточно знать: она считает элементы любого списка.

Элементы бывают любых типов

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

элементы разных типов в одном списке
order = ['хлеб', 2, 49.9, True]
print(len(order))
print(type(order).__name__)
print(type(order[0]).__name__, type(order[1]).__name__)
Вывод
4
list
str int

Сам список имеет тип list, а каждый его элемент сохраняет собственный: у первого — str, у второго — int. Python не требует одинаковых типов внутри списка, поэтому он подходит и для однородных данных вроде столбца температур, и для разнородных записей вроде этого заказа. Правда, для пар «название плюс значение» позже окажется удобнее словарь — первый урок про словари покажет разницу.

Элемент по индексу: первый — это ноль

Каждый элемент списка имеет номер — индекс. Индекс пишется в квадратных скобках сразу после имени переменной. Важнейшая деталь Python: нумерация начинается с нуля, поэтому первый элемент корзины — это cart[0]:

чтение элементов по индексу
cart = ['хлеб', 'молоко', 'сыр']
print(cart[0])
print(cart[1])
print(cart[2])
Вывод
хлеб
молоко
сыр

cart[0] — хлеб, cart[1] — молоко, cart[2] — сыр: индекс на единицу меньше порядкового номера. Ноль как первый индекс — самая знаменитая особенность Python, и к ней привыкают за пару дней. Отрицательные индексы, счёт с конца и ошибка IndexError при выходе за границу — материал отдельного урока про индексы.

Элемент можно заменить

Список изменяем: присваивание по индексу перезаписывает элемент, и весь остальной список остаётся на месте. Заменим молоко на кефир:

замена элемента по индексу
cart = ['хлеб', 'молоко', 'сыр']
cart[1] = 'кефир'
print(cart)
print(len(cart))
Вывод
['хлеб', 'кефир', 'сыр']
3

Присваивание cart[1] = 'кефир' изменило существующий список, а не создало новый: это называют мутацией на месте. Длина не изменилась — замена не добавляет и не убирает элементы. За изменяемость список платит коварством при копировании: урок про копию списка разберёт, почему b = a копией не является.

Пустой список и первый элемент

Список создают и пустым — квадратные скобки без элементов. Так начинают корзины, которые наполняются по ходу программы. Добавление делает метод append:

пустой список наполняется
cart = []
print(len(cart))
cart.append('хлеб')
cart.append('молоко')
print(cart)
print(len(cart))
Вывод
0
['хлеб', 'молоко']
2

Пустой список имеет длину 0, и каждый append прибавляет по элементу в конец. Тот же пустой список создаёт функция list() — она удобна, когда скобки визуально путаются с чем-то ещё. Обе записи равнозначны, а сам метод append с его правилами — тема следующего урока.

Список помнит порядок

Два списка с одними и теми же элементами, но в разном порядке — разные списки. Проверим сравнением:

порядок — часть значения списка
day = ['утро', 'день', 'вечер']
shuffled = ['вечер', 'день', 'утро']
print(day == shuffled)
print(day == ['утро', 'день', 'вечер'])
Вывод
False
True

Порядок входит в само значение списка: перестановка элементов меняет данные. Это отличие от множеств из курса про set — там порядок не гарантирован, и его при печати собирают функцией sorted. У списка порядок встроенный, поэтому он годится для журналов, очередей и планов, где «что за чем» важно.

Ловушка падает мгновенно — TypeError уже на строке склейки:

так падает склейка строки со списком
cart = ['хлеб', 'молоко']
print('Корзина: ' + cart)
Вывод
Traceback (most recent call last):
  File "app.py", line 2, in <module>
    print('Корзина: ' + cart)
          ~~~~~~~~~~~~^~~~~~
TypeError: can only concatenate str (not "list") to str
Путь к файлу в traceback условный, у вас он будет свой. Честный способ печати — запятая: print('Корзина:', cart) напечатает текст и список через пробел.

Когда нужен именно список

У Python несколько коллекций, и на старте легко перепутать, какую выбрать. Список — выбор по умолчанию: он хранит порядок, разрешает дубликаты и умеет меняться на месте. Сводим выбор в таблицу:

ЗадачаСтруктураПочему
Упорядоченный набор: журнал, очередь, планlistСписок хранит порядок элементов
Повторы допустимыlistДва одинаковых элемента живут в списке спокойно
Состав меняется по ходу программыlistappend, insert и del меняют список на месте
Только уникальные значенияsetМножество само отбрасывает дубликаты

Первый список создан: запись в квадратных скобках, чтение по индексу с нуля, замена на месте и пустой список с append. Дальше корзину нужно научиться пополнять по одному товару — это метод append, самый частый метод списков и тема следующего урока.

Что выведет код?

Сначала предскажи ответ в голове — это главный навык программиста.

cart = ['хлеб', 'молоко', 'сыр']
cart[2] = 'parmigiano'
print(cart)
print(len(cart))
cart = []
cart.append('чай')
print(len(cart))
print(cart)
a = [1, 2, 3]
print(type(a).__name__)
print(a[1])
Проверь себя
0 / 6

1. Как записать список из трёх строк в Python?

2. Что вернёт cart[0] для списка cart = ['хлеб', 'молоко', 'сыр']?

3. Что делает строка cart[1] = 'кефир'?

4. Сколько элементов в списке order = ['хлеб', 2, 49.9, True] и какого он типа?

5. Как правильно напечатать список рядом с текстом?

6. Что вернёт сравнение ['утро', 'день'] == ['день', 'утро']?

Карточки терминов
Запомнено: 0 / 7
Практика

Дан список cart = ['хлеб', 'молоко', 'сыр']. Замените третий товар на 'киви' и напечатайте две строки: получившийся список и его длину.

practice.py
Вопросы и ответы по уроку

Что такое список в Python простыми словами?

Список (list) — одна переменная, внутри которой лежит упорядоченный набор значений: корзина товаров, строки отчёта, задачи на день. Элементы записывают в квадратных скобках через запятую, читают по индексу, меняют и удаляют — список изменяем. Порядок элементов сохраняется, дубликаты разрешены.

Урок 2: добавление в конец

Как создать список в Python?

Перечислить элементы в квадратных скобках через запятую: cart = ['хлеб', 'молоко', 'сыр']. Пустой список записывается как [] или создаётся функцией list() — он пригодится, когда элементы появляются по ходу программы и добавляются методом append.

Как обратиться к элементу списка?

Указать индекс в квадратных скобках после имени: cart[0] — первый элемент, cart[1] — второй. Нумерация начинается с нуля, поэтому индекс на единицу меньше порядкового номера. Есть и отрицательные индексы: cart[-1] — последний элемент.

Урок 6: индексы с нуля и с конца

Чем список отличается от множества set?

Список хранит порядок и дубликаты и умеет индексировать: cart[0], срезы, замена по индексу. Множество хранит только уникальные элементы, порядок не гарантирует и индексов не имеет. Для журналов и последовательностей нужен список, для уникальных значений — множество.

Урок 1: первое множество

Можно ли хранить разные типы в одном списке?

Да: order = ['хлеб', 2, 49.9, True] — корректный список из четырёх элементов. Тип самого списка — list, а каждый элемент сохраняет собственный тип. Python не требует одинаковых типов внутри списка.

Понравился урок? Сошлитесь на него

«Порядок входит в само значение списка: перестановка элементов меняет данные.»

Скопируйте готовую ссылку в формате HTML, Markdown или чистый адрес и вставьте в статью на Habr, VC, Telegram-канал или свой блог — так о проекте узнают новые читатели.

TelegramVK

Что дальше

Осталось в разделе: 20 из 20. Прогресс хранится в вашем браузере.

Похожие уроки по темам

Подобраны автоматически по пересечению тем и ключевых слов.