Сообщить об ошибке.

Список list в Python

Списки представляют собой изменяемые последовательности, обычно используемые для хранения коллекций однородных элементов, где степень сходства зависит от приложения.

Списки поддерживают следующие операции:

В Python списки представлены встроенным классом list(), его можно использовать для преобразования итерируемых объектов в тип list.

Списки могут быть созданы несколькими способами:

  1. Используя пару квадратных скобок для обозначения пустого списка: [].
  2. Используя квадратные скобки, разделяя элементы запятыми: [a, b, c].
  3. Используя генератор списка: [x for x in iterable].
  4. Используя конструктор типа list:
    • list() - создаст пустой список,
    • list(iterable) - преобразует в список объект, который поддерживает итерацию.

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

Дополнительно смотрите использование списков list в Python.

Примечание: Список list в Python - это швейцарский нож (если так можно выразиться), но в некоторых ситуациях списки менее эффективны чем другие типы данных.

  • Если код программы многократно использует операцию вхождения в список list, то для этой цели лучше использовать множество set. Множества set/frozenset специально заточены для этой цели.
  • Когда код программы часто добавляет элементы списка с одной стороны и удаляет с другой стороны (методы с изменяемыми последовательностями это делать позволяют). В этом случае следует использовать класс deque который представляет собой двустороннюю очередь, которая предназначена для быстрого добавления и удаления элементов с обоих концов последовательности.

Список list способен хранить в себе разные типы данных.

Дополнительно смотрите материал "Создание пользовательского класса списка list в Python".

Примеры использования создания списка и преобразования объектов к типу list:

>>> list()
# Создание списка
# []
>>> []
# []
>>> [1, 'a', 10, 'b', '105']
# [1, 'a', 10, 'b', '105']


# Преобразование строки str в список тип list
>>> list('abc')
# ['a',' b',' c']

# Преобразование кортежа tuple в список тип list
>>> list((1, 2, 3))
# [1, 2, 3]

# Преобразование множества set в список тип list
>>> list({1, 2, 3})
# [1, 2, 3]

# Преобразование генератора в список тип list
>>> list(range(5))
# [0, 1, 2, 3, 4]

# Преобразуем список строк в список чисел
x = ['55', '11', '25', '15', '9']
int_list = [int(i) for i in x]
print(int_list)
# [11, 15, 25, 55, 9]

Если объект iterable уже является списком, создается и возвращается копия, аналогичная iterable[:]. Многие другие операции также создают списки, в том числе встроенная функция sorted().

Списки имеют дополнительный метод:

list.sort(*, key=None, reverse=False):

Метод сортирует список на месте, используя только оператор < сравнения между элементами. Исключения при сравнении не подавляются - если какие-либо операции сравнения завершатся неудачей, то вся операция сортировки завершится неудачей и список, скорее всего, останется в частично измененном состоянии.

Метод list.sort() принимает два аргумента, которые могут передаваться только по ключевому слову:

  • key определяет функцию с одним аргументом, которая используется для извлечения ключа сравнения из каждого элемента списка, например, key=str.lower. Ключ, соответствующий каждому элементу в списке, вычисляется один раз и затем используется для всего процесса сортировки. Значение по умолчанию None означает, что элементы списка сортируются напрямую без вычисления отдельного значения ключа.
  • reverse это логическое значение. Если установлено значение True, то элементы списка сортируются так, как если бы каждое сравнение было обратным.

Метод изменяет последовательность на месте для экономии памяти при сортировке большой последовательности. Чтобы напомнить пользователям, что он работает с таким эффектом, он не возвращает отсортированную последовательность. Для того, что бы получить копию отсортированного списка используйте встроенную функцию сортировки sorted().

Метод list.sort() гарантированно будет стабильным. Сортировка является стабильной, если она гарантирует отсутствие изменения относительного порядка элементов, которые будут равными в сортируемом списке. Это полезно для сортировки за несколько проходов, например сортировка по отделу, а затем по уровню зарплаты.

Примеры использования сортировки списка методом sort():

>>> x = [5, 2, 3, 1, 4]
>>> x.sort()
>>> x
# [1, 2, 3, 4, 5]

# Обратная сортировка - reverse=True
>>> x = [5, 2, 3, 1, 4]
>>> x.sort(reverse=True)
>>> x
# [5, 4, 3, 2, 1]

Сортировка по длине строки, в качестве функции сортировки выступает встроенная len():

>>> x = ['a', 'dddd', 'сс', 'bbb']
>>> x.sort(key=len)
>>> x
# ['a', 'сс', 'bbb', 'dddd']

В следующем примере, в списке x представлена последовательность чисел в качестве строк. При простой сортировке будет использоваться лексикографическое сравнение.

>>> x = ['55', '11', '25', '15', '9']
>>> x.sort()
>>> x
# ['11', '15', '25', '55', '9']

Применим в качестве ключевой функции для сравнения класс int(), для преобразования строк в целые числа, что бы упорядочить последовательность строк как будто это список чисел.

>>> x = ['55', '11', '25', '15', '9']
>>> x.sort(key=int)
>>> x
# ['9', '11', '15', '25', '55']