Списки — упорядоченные и изменяемые последовательности
Список — самый используемый коллекционный тип в Python. Если ты держишь упорядоченный набор значений, который может меняться — добавлять, удалять, сортировать, обновлять — список почти всегда правильный выбор.
Создаётся квадратными скобками:
Списки могут держать что угодно, даже другие списки. На практике в большинстве списков оказывается что-то одно — список пользователей, список чисел, — потому что с однородным списком проще размышлять.
Индексирование
У каждого элемента есть позиция, начинающаяся с 0. Доступ — квадратными скобками:
Запрос несуществующего индекса поднимает IndexError. Если есть шанс выйти за пределы — сначала проверь длину или оберни доступ в try.
Срезы
Срез даёт тебе диапазон элементов. Синтаксис — list[start:stop:step], такой же, как у строк:
Два факта стоит зафиксировать:
- Срез всегда возвращает новый список. Изменение среза не трогает исходник.
- Индекс stop не входит —
nums[2:5]даёт индексы 2, 3 и 4, не 5.
Append, extend, insert
Три метода «добавить в список» делают разное, путаница между ними — частая причина багов:
append(x)добавляетxкак один элемент — даже еслиxсам список.items.append([1, 2])добавляет список целиком как одну запись.extend(iterable)добавляет каждый элемент из итерируемого.items.extend([1, 2])добавляет две записи.insert(i, x)вставляет по конкретному индексу, сдвигая всё, что было наiи дальше, на одну позицию вправо.
+= со списком справа работает как extend:
И для удаления:
Если попытаться remove() того, чего нет в списке, Python поднимает ValueError. Если нужно «удали, если есть» — либо проверь через in, либо используй try.
По индексу можно удалять и через del:
Длина, принадлежность, подсчёт
in — читаемый способ проверить, есть ли значение в списке. Если такой вопрос задаёшь много раз на большом списке — бери множество: поиск в множестве O(1), в списке — O(n).
Сортировка
Два способа, и выбор важен:
Оба принимают reverse=True для убывающего порядка:
И функцию key для своего порядка:
key применяется к каждому элементу, и уже её результат сравнивается. Частые случаи: сортировка по длине, по какому-то атрибуту или по нижнему регистру строки.
Переворот
Три варианта, смотря что нужно:
На месте — когда исходник не нужен. Срез — когда хочется новую копию. reversed() — когда просто нужна итерация в обратном порядке без материализации нового списка.
Ловушка общей ссылки
Списки изменяемы, а переменные — ссылки. Это значит, две переменные могут указывать на один и тот же список:
b = a не скопировал список; он сделал b вторым именем того же списка. Нужна копия — попроси её:
Это кусает каждого Python-программиста хотя бы раз. Запомни: = между двумя списками не копирует.
Цикл и сборка
Базовый паттерн ты уже знаешь со страницы про for:
Это читаемо и всегда нормально. Когда освоишься, эквивалент через списковое включение делает то же самое в одну строку:
Включения разберём подробно через пару страниц.
Короткая шпаргалка
Методы, которые стоит знать, одним взглядом:
append(x)— добавить в конецextend(iter)— добавить каждый элемент из итерируемогоinsert(i, x)— вставить по индексу ipop()/pop(i)— удалить и вернутьremove(x)— удалить первое вхождение xsort()/sort(key=...)/sort(reverse=True)reverse()index(x)— позиция первого xcount(x)— сколько x-овcopy()— поверхностная копия
Дальше
Списки — рабочая лошадка. Следующий — кортежи, их неизменяемый кузен, и моменты, когда разумнее тянуться за ним.
Часто задаваемые вопросы
Как создать список в Python?
Используй квадратные скобки со значениями через запятую: fruits = ['apple', 'banana', 'cherry']. Список может хранить любые типы, и можно смешивать их в одном списке, хотя по привычке большинство реальных списков однородны.
Как отсортировать список в Python?
Вызови .sort() на списке — отсортирует на месте — или используй встроенный sorted(list), чтобы получить новый отсортированный список без изменения исходного. Оба принимают флаг reverse=True для убывающего порядка и аргумент key= для своей сортировочной функции.
Как перевернуть список в Python?
list.reverse() переворачивает на месте. list[::-1] возвращает новый перевёрнутый список. reversed(list) возвращает итератор для обхода. Выбирай под задачу: на месте, новая копия или ленивая итерация.