Списки представляют собой изменяемые последовательности, обычно используемые для хранения коллекций однородных элементов, где степень сходства зависит от приложения.
Списки поддерживают следующие операции:
В Python списки представлены встроенным классом list()
, его можно использовать для преобразования итерируемых объектов в тип list
.
Списки могут быть созданы несколькими способами:
[]
.[a, b, c]
.[x for x in iterable]
.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']