Язык программирования Python имеет несколько составных типов данных, используемых для группировки значений. Наиболее универсальным является список, который можно записать в виде списка значений (элементов), разделенных запятыми, в квадратных скобках. Списки могут содержать элементы разных типов, но обычно все элементы имеют одинаковый тип.
>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]
Как и все другие встроенные типы последовательностей, списки можно индексировать и извлекать срезы:
# индексация возвращает элемент
>>> squares[0]
# 1
>>> squares[-1]
# 25
# срез возвращает новый список
>>> squares[-3:]
# [9, 16, 25]
Все операции срезов возвращают новый список, содержащий запрошенные элементы. Это означает, что следующий фрагмент возвращает поверхностную копию списка:
# копирование списка
>>> cp = squares[:]
>>> cp
# [1, 4, 9, 16, 25]
>>> cp.remove(1)
>>> cp
# [4, 9, 16, 25]
# список squares не изменился
>>> squares
# [1, 4, 9, 16, 25]
Списки также поддерживают такие операции, как конкатенация:
>>> squares + [36, 49, 64, 81, 100]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
В отличие от текстовых строк, которые являются неизменяемыми, списки являются изменяемым типом, то есть можно изменить их содержимое:
>>> cubes = [1, 8, 27, 65, 125]
>>> 4 ** 3
# 64
# заменим неправильное значение
>>> cubes[3] = 64
>>> cubes
# [1, 8, 27, 64, 125]
Можно добавить новые элементы в конец списка, используя list.append()
>>> cubes.append(216) # add the cube of 6
>>> cubes.append(7 ** 3) # and the cube of 7
>>> cubes
# [1, 8, 27, 64, 125, 216, 343]
Возможно присвоение срезов, и это может даже изменить размер списка или полностью очистить его:
>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
# ['a', 'b', 'c', 'd', 'e', 'f', 'g']
# заменить некоторые значения
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
# ['a', 'b', 'C', 'D', 'E', 'f', 'g']
# теперь удалим их
>>> letters[2:5] = []
>>> letters
# ['a', 'b', 'f', 'g']
# очистим список, заменив все элементы пустым списком
>>> letters[:] = []
>>> letters
# []
Встроенная функция len()
, которая вычисляет количество элементов в списке, также применяется к спискам:
>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
# 4
Можно вкладывать списки (создавать списки, содержащие другие списки), например:
>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
# [['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
# ['a', 'b', 'c']
>>> x[0][1]
# 'b'
Такие методы, как list.insert
, list.remove
или list.sort
, которые только изменяют список, не печатают возвращаемое значение, они возвращают значение None
по умолчанию. Это принцип проектирования для всех изменяемых структур данных в Python.
Кроме того, вы можете заметить, что не все данные могут быть отсортированы или сравнены. Например, [None, 'hello', 10]
не сортируется, потому что целые числа нельзя сравнить со строками, а None
нельзя сравнить с другими типами. Кроме того, есть некоторые типы, которые не имеют определенного упорядочения. Например выражение 3+4j < 5+7j
комплексных чисел не является допустимым сравнением.
list.append(х)
:
Добавляет элемент в конец списка. Эквивалент lst[len(lst):] = [x]
list.extend(iterable)
:
Расширяет список, добавив все элементы из последовательности которая поддерживает итерацию. Эквивалент lst[len(lst):] = iterable
list.insert(i, x)
:
Вставляет элемент в заданную позицию. Первый аргумент - это индекс элемента, перед которым можно вставить, поэтому lst.insert(0, x)
вставляется в начало списка, а выражение lst.insert(len(lst), x)
эквивалентно a.append(x)
.
list.remove(x)
:
Удаляет первый элемент из списка, значение которого равно x
. Поднимает ValueError
, если такого элемента нет.
list.pop([i])
:
Возвращает элемент в указанной позиции и удаляет этот элемент из списка. Если индекс не указан lst.pop()
, то удаляет и возвращает последний элемент из списка. Квадратные скобки вокруг i
в сигнатуре метода означают, что параметр является необязательным, а не то, что вы должны вводить квадратные скобки в этой позиции. Вы часто будете видеть это обозначение в Справочнике по библиотеке Python.
list.clear()
:
Удаляет все элементы из списка. Эквивалент del a[:]
.
list.index(x[, start[, end]])
:
Возвращает нулевой индекс в списке первого элемента, значение которого равно x
. Поднимает ValueError
, если такого элемента нет.
Необязательные аргументы start
и end
интерпретируются так же, как в нотации среза, и используются для ограничения поиска определенной подпоследовательностью списка. Возвращенный индекс вычисляется относительно начала полной последовательности, а не аргумента start
.
list.count(x)
:
Возвращает количество появлений значения x
в списке.
list.sort(key=None, reverse=False)
(см. в описании типа метод list.sort
):
Сортировка элементов списка на месте. Аргументы могут быть использованы для настройки сортировки, значения аргументов, такие-же как во встроенной функции sorted()
.
list.reverse()
:
Меняет местами элементы списка. Переворачивает список.
list.copy()
:
Возвращает мелкую копию списка. Эквивалент lst[:]
.
Так-же дополнительно смотрите:
list()
.list
- списки в Python.Один из самых опасных случаев - это использование списка list (изменяемых последовательностей) в качестве аргументов по умолчанию для функций. Причина такого поведения заключается в том, что когда интерпретатор определяет функцию, он также создает аргумент по умолчанию.
Методы списка позволяют очень легко использовать список в виде стека, где последний добавленный элемент - это первый извлеченный элемент, "последний пришел, первый вышел".
Методы списков не эффективны для построения очереди. Добавление/вставка элемента в конце списка выполняются быстро, а вот вставка элемента в начале списка выполняются медленно, так как все остальные элементы должны быть смещены на один.
Список-выражение состоит из скобок, внутри которых, сначала идет нужное нам выражение, за которым следует предложение for ... in, далее выражение может включать ноль или более подвыражений for ... in или предложения if ... else
Начальным выражением в списке-выражении может быть любое произвольное выражение, включая другой список-выражение.
Рассмотрим пример того, как оператор + работает с объектом list.
Описанное поведение списков в разных областях видимости часто сбивает с толку молодых разработчиков. Ответ более тонкий и кроется в области видимости глобальной переменной списка lst в локальной области функции.
В материале представлены разные подходы к сравнению двух списков и вычисления их идентичности.
Получаем 2 способами несколько последних элементов списка в Python.