Menu
Русский

Списки в Python: как создать, индексировать, добавлять, сортировать и итерировать

Рабочий обзор списков Python — самой популярной коллекции — создание, индексирование, срезы, append, sort и паттерны, к которым ты будешь тянуться чаще всего.

Списки — упорядоченные и изменяемые последовательности

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

Создаётся квадратными скобками:

main.py
Output
Click Run to see the output here.

Списки могут держать что угодно, даже другие списки. На практике в большинстве списков оказывается что-то одно — список пользователей, список чисел, — потому что с однородным списком проще размышлять.

Индексирование

У каждого элемента есть позиция, начинающаяся с 0. Доступ — квадратными скобками:

main.py
Output
Click Run to see the output here.

Запрос несуществующего индекса поднимает IndexError. Если есть шанс выйти за пределы — сначала проверь длину или оберни доступ в try.

Срезы

Срез даёт тебе диапазон элементов. Синтаксис — list[start:stop:step], такой же, как у строк:

main.py
Output
Click Run to see the output here.

Два факта стоит зафиксировать:

  • Срез всегда возвращает новый список. Изменение среза не трогает исходник.
  • Индекс stop не входит — nums[2:5] даёт индексы 2, 3 и 4, не 5.

Append, extend, insert

Три метода «добавить в список» делают разное, путаница между ними — частая причина багов:

main.py
Output
Click Run to see the output here.
  • append(x) добавляет x как один элемент — даже если x сам список. items.append([1, 2]) добавляет список целиком как одну запись.
  • extend(iterable) добавляет каждый элемент из итерируемого. items.extend([1, 2]) добавляет две записи.
  • insert(i, x) вставляет по конкретному индексу, сдвигая всё, что было на i и дальше, на одну позицию вправо.

+= со списком справа работает как extend:

main.py
Output
Click Run to see the output here.

И для удаления:

main.py
Output
Click Run to see the output here.

Если попытаться remove() того, чего нет в списке, Python поднимает ValueError. Если нужно «удали, если есть» — либо проверь через in, либо используй try.

По индексу можно удалять и через del:

main.py
Output
Click Run to see the output here.

Длина, принадлежность, подсчёт

main.py
Output
Click Run to see the output here.

in — читаемый способ проверить, есть ли значение в списке. Если такой вопрос задаёшь много раз на большом списке — бери множество: поиск в множестве O(1), в списке — O(n).

Сортировка

Два способа, и выбор важен:

main.py
Output
Click Run to see the output here.

Оба принимают reverse=True для убывающего порядка:

main.py
Output
Click Run to see the output here.

И функцию key для своего порядка:

main.py
Output
Click Run to see the output here.

key применяется к каждому элементу, и уже её результат сравнивается. Частые случаи: сортировка по длине, по какому-то атрибуту или по нижнему регистру строки.

Переворот

Три варианта, смотря что нужно:

main.py
Output
Click Run to see the output here.

На месте — когда исходник не нужен. Срез — когда хочется новую копию. reversed() — когда просто нужна итерация в обратном порядке без материализации нового списка.

Ловушка общей ссылки

Списки изменяемы, а переменные — ссылки. Это значит, две переменные могут указывать на один и тот же список:

main.py
Output
Click Run to see the output here.

b = a не скопировал список; он сделал b вторым именем того же списка. Нужна копия — попроси её:

main.py
Output
Click Run to see the output here.

Это кусает каждого Python-программиста хотя бы раз. Запомни: = между двумя списками не копирует.

Цикл и сборка

Базовый паттерн ты уже знаешь со страницы про for:

main.py
Output
Click Run to see the output here.

Это читаемо и всегда нормально. Когда освоишься, эквивалент через списковое включение делает то же самое в одну строку:

main.py
Output
Click Run to see the output here.

Включения разберём подробно через пару страниц.

Короткая шпаргалка

Методы, которые стоит знать, одним взглядом:

  • append(x) — добавить в конец
  • extend(iter) — добавить каждый элемент из итерируемого
  • insert(i, x) — вставить по индексу i
  • pop() / pop(i) — удалить и вернуть
  • remove(x) — удалить первое вхождение x
  • sort() / sort(key=...) / sort(reverse=True)
  • reverse()
  • index(x) — позиция первого x
  • count(x) — сколько x-ов
  • copy() — поверхностная копия

Дальше

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

Часто задаваемые вопросы

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

Используй квадратные скобки со значениями через запятую: fruits = ['apple', 'banana', 'cherry']. Список может хранить любые типы, и можно смешивать их в одном списке, хотя по привычке большинство реальных списков однородны.

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

Вызови .sort() на списке — отсортирует на месте — или используй встроенный sorted(list), чтобы получить новый отсортированный список без изменения исходного. Оба принимают флаг reverse=True для убывающего порядка и аргумент key= для своей сортировочной функции.

Как перевернуть список в Python?

list.reverse() переворачивает на месте. list[::-1] возвращает новый перевёрнутый список. reversed(list) возвращает итератор для обхода. Выбирай под задачу: на месте, новая копия или ленивая итерация.

Учитесь программировать с Coddy

НАЧАТЬ