list (список)
Список — изменяемая последовательность с упорядоченными элементами.
list([iterable])
iterable -- Последовательность или объект, поддерживающий итерирование (включая генераторы).
Элементами списков могут выступать любые объекты.
В коде списки могут быть объявлены при помощи квадратных скобок —
Кроме того, можно объявить их при помощи конструктора list().
Для замены значений используется обращение по индексу с последующим присвоением нового значения.
Для удаления из списка одиночных элементов и срезов может использоваться инструкция del:
Два списка сравниваются лексикографически: считаются равными, если имеют одинаковую длину и равны их соответствующие элементы:
Элементы в списках упорядочены по очередности их добавления.
Списки реализованы при помощи динамических массивов (а не связных списков в стиле Lisp). В реализации используется непрерывный массив ссылок на объекты, а в начале структуры списка хранится указатель на данный массив и его длина. Такой подход позволяет обращаться к элементам за постоянное время — O(1) — вне зависимости от длины списка.
При добавлении или вставке новых элементов массив ссылок меняет размер. Специальное для случаев повторых добавлений элементов в список массив наращивается таким образом, чтобы уменьшить вероятность необходимости изменения размера в последующем (наперёд резервируется дополнительное место). То есть, при добавлении элементов в список происходит наращивание слотов (места под текущие и будущие элементы) в массиве. Размер наращивания зависит от текущего количества элементов, прогрессия:
Объявление
В коде списки могут быть объявлены при помощи квадратных скобок —
[]
— внутри скобок через запятую перечисляются элементы в нужной последовательности. 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 (список), списки, методы списка, методы списков, [], лист, дшые, массивы
В этом разделе:
list.append
list.clear
list.copy
list.count
list.extend
list.insert
list.pop
list.remove
list.reverse
list.sort
В разделе «Sequence (последовательность)»:
range (диапазон)
sequence.index
str (строка)
tuple (кортеж)
xrange
На заметку
У нас есть представительство в Facebook. Ссылка в самом низу страницы.