Список — изменяемая последовательность с упорядоченными элементами.
list([iterable])
iterable -- Последовательность или объект, поддерживающий итерирование (включая генераторы).

Элементами списков могут выступать любые объекты.

Объявление


В коде списки могут быть объявлены при помощи квадратных скобок — [] — внутри скобок через запятую перечисляются элементы в нужной последовательности.

    my_empty_list = list()
my_empty_list = []
my_list = [1, 'some', 3.5]
my_list = list(idx for idx in range(3)) # [0, 1, 2]

Кроме того, можно объявить их при помощи конструктора list().


Замена элементов


Для замены значений используется обращение по индексу с последующим присвоением нового значения.

    my_list = [1, 2, 3]
my_list[1] = 11 # [1, 11, 3]
my_list[10] = 22 # IndexError

Удаление элементов


Для удаления из списка одиночных элементов и срезов может использоваться инструкция del:

    my_list = [1, 2, 3, 4, 5]
del my_list[0] # [2, 3, 4, 5]
del my_list[:2] # [4, 5]
del my_list[:] # []

Сравнение


Два списка сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы:

    a = [3, 2, 1]
b = [1, 2, 3]
d = [3, 2, 2]
e = [3, 2]
f = [3, 2, 'a']
a > b # True
a > d # False
d > b # True
a > e # True
a > f # False

Порядок элементов


Элементы в списках упорядочены по очередности их добавления.

На заметку
О сложности основных операций для данного типа можно узнать из статьи «Сложность операций со списками».

Детали реализации CPython


Списки реализованы при помощи динамических массивов (а не связных списков в стиле Lisp). В реализации используется непрерывный массив ссылок на объекты, а в начале структуры списка хранится указатель на данный массив и его длина. Такой подход позволяет обращаться к элементам за постоянное время — O(1) — вне зависимости от длины списка.

При добавлении или вставке новых элементов массив ссылок меняет размер. Специальное для случаев повторых добавлений элементов в список массив наращивается таким образом, чтобы уменьшить вероятность необходимости изменения размера в последующем (наперёд резервируется дополнительное место). То есть, при добавлении элементов в список происходит наращивание слотов (места под текущие и будущие элементы) в массиве. Размер наращивания зависит от текущего количества элементов, прогрессия: 0, 4, 8, 16, 25, 35, 46, 58, 72, 88 и т.д (при добавления первого элемента, выделится 3 дополнительных слота, при добавлении 17-го — 8 слотов).

На заметку
При удалении списка (например, с помощью del, или сборщика мусора), его опустошенный объект кешируется и используется в последующем для создания нового списка. См. пример ниже.

    list_0 = [1, 2, 3]
print('list_0 %s' % id(list_0)) # list_0 139904656455656
del list_0
# Далее предполагается, что сборка мусора уже прошла.
# Проще всего наблюдать за работой из интерактивного сеанса
# интерпретатора.

list_1 = []
print('list_1 %s' % id(list_1)) # list_1 139904656455656
del list_1

list_2 = [4, 5]
print('list_2 %s' % id(list_2)) # list_2 139904656455656
list_2.extend([6, 7])

list_3 = []
print('list_3 %s' % id(list_3)) # list_3 139904656456952
del list_3

list_4 = []
print('list_4 %s' % id(list_4)) # list_4 139904656456952


Синонимы поиска: list (список), списки, методы списка, методы списков, [], лист, дшые, массивы
На заметку
Зарегистрированные пользователи могут публиковать свои мнения относительно Книг, Видео, Статей других авторов и прочего в разделе Обсуждений.