Список в 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Когда нужен именно список
У Python несколько коллекций, и на старте легко перепутать, какую выбрать. Список — выбор по умолчанию: он хранит порядок, разрешает дубликаты и умеет меняться на месте. Сводим выбор в таблицу:
| Задача | Структура | Почему |
|---|---|---|
| Упорядоченный набор: журнал, очередь, план | list | Список хранит порядок элементов |
| Повторы допустимы | list | Два одинаковых элемента живут в списке спокойно |
| Состав меняется по ходу программы | list | append, 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])
1. Как записать список из трёх строк в Python?
2. Что вернёт cart[0] для списка cart = ['хлеб', 'молоко', 'сыр']?
3. Что делает строка cart[1] = 'кефир'?
4. Сколько элементов в списке order = ['хлеб', 2, 49.9, True] и какого он типа?
5. Как правильно напечатать список рядом с текстом?
6. Что вернёт сравнение ['утро', 'день'] == ['день', 'утро']?
Дан список cart = ['хлеб', 'молоко', 'сыр']. Замените третий товар на 'киви' и напечатайте две строки: получившийся список и его длину.
Что такое список в 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-канал или свой блог — так о проекте узнают новые читатели.
Что дальше
Осталось в разделе: 20 из 20. Прогресс хранится в вашем браузере.
Что читать дальше
Списки · Урок 2
Python append: добавляем элемент в конец списка
append кладёт один элемент в конец списка и меняет список на месте. Метод возвращает None — поэтому строка nums = nums.append(x) теряет список.
Списки · Урок 6
Python индексы списка: с нуля и с конца, IndexError
Первый элемент списка — индекс 0, последний — -1. Отрицательные индексы считают с конца, а выход за границу падает с IndexError.
Списки · Урок 5
Python длина списка: len и подсчёт элементов
len(cart) отвечает, сколько элементов в списке: одна функция вместо цикла с ручным счётчиком. Пустой список — длина 0, число длины не имеет.
Похожие уроки по темам
Подобраны автоматически по пересечению тем и ключевых слов.
json · Урок 11
Фильтрация данных: найти нужное в JSON
Включение с условием для отбора, next с default для первого подходящего, any и all для вопросов ко всей коллекции — работаем с выгрузкой заказов.
python отфильтровать список словарейlist comprehension if python json
Строки · Урок 18
Строки и списки: перевод туда-обратно
Строка ведёт себя почти как список символов, но с одним запретом — на изменение. Учимся свободно переводить строку в список и обратно и использовать силу обоих миров.
python строка в списокlist python строка
Списки · Урок 15
Копия списка в Python: b = a не копия
b = a выглядит как копия, но создаёт вторую ссылку на тот же список: правки через b видны в a. Три способа скопировать по-настоящему и ловушка вложенных списков.
python копия спискаpython скопировать список