Список
Оригинальное название: list
Коротко
Упорядоченный набор элементов, к которым можно обращаться по позиции, добавлять новые и удалять старые. Значения в нём могут повторяться.
Что такое «Список»
Список — одна из первых структур, с которой сталкивается программист: товары в корзине, строки CSV-файла, пункты меню, результаты поиска. От множества он отличается тем, что важен порядок и допустимы повторы. От словаря — тем, что элементы адресуются номером, а не произвольным ключом.
Важно различать список как идею и способ его хранения в памяти. Одна и та же идея реализуется по-разному: через непрерывный массив, который при нехватке места переезжает в больший, или через связный список из узлов со ссылками. От реализации зависит скорость операций.
Списки в разных языках
- Python: тип
list— динамический массив, доступ по индексу быстрый. - JavaScript: обычный
Arrayвыполняет роль списка. - Java: интерфейс
Listс реализациямиArrayListиLinkedList. - PHP: отдельного типа нет, список — это массив с ключами 0, 1, 2 по порядку.
Пример: ловушка списков в PHP
Массив PHP на самом деле упорядоченная хеш-таблица. После удаления элемента ключи не перенумеровываются, и массив перестаёт быть списком:
$cities = ['Москва', 'Казань', 'Пермь'];
unset($cities[1]);
var_dump(array_is_list($cities)); // bool(false)
echo json_encode($cities); // {"0":"Москва","2":"Пермь"}
$cities = array_values($cities); // перенумеровать ключи
echo json_encode($cities); // ["Москва","Пермь"]
На практике это частая причина ошибок в API: фронтенд ждёт JSON-массив, а получает объект. Функция array_is_list() доступна с PHP 8.1. Для кириллицы в выводе json_encode заменит буквы на коды вида \u041c, если не передать флаг JSON_UNESCAPED_UNICODE; в примере вывод упрощён.
Как выбрать структуру
Если нужно сохранить порядок и перебирать элементы — подходит список. Если важно быстро проверять, есть ли значение, и повторы не нужны — множество или словарь с ключами-значениями. Если элементы постоянно добавляются в начало и удаляются из середины — стоит присмотреться к связной реализации. Общий обзор таких вариантов дан в статье про структуры данных.

