Списки представляют собой изменяемые последовательности, обычно используемые для хранения коллекций однородных элементов, где степень сходства зависит от приложения.
Списки поддерживают следующие операции:
Списки могут быть созданы несколькими способами:
- Используя пару квадратных скобок для обозначения пустого списка:
[]
. - Используя квадратные скобки, разделяя элементы запятыми:
[a]
, [a, b, c]
. - Используя генератор списка:
[x for x in iterable]
. - Используя конструктор типа
list
:list()
- создаст пустой список, list(iterable)
- преобразует, контейнером поддерживающим итерацию в список.
Примечание: Список list
в Python - это швейцарский нож (если так можно выразиться), но в некоторых ситуациях списки менее эффективны чем другие типы данных.
- Если код программы многократно использует операцию вхождения в список
list
, то для этой цели лучше использовать множество set
. Множества set
/frozenset
специально заточены для этой цели. - Когда код программы часто добавляет элементы списка с одной стороны и удаляет с другой стороны (методы с изменяемыми последовательностями это делать позволяют). В этом случае следует использовать класс
deque
который представляет собой двустороннюю очередь, которая предназначена для быстрого добавления и удаления элементов с обоих концов последовательности.
Список list
способен хранить в себе разные типы данных.
Примеры использования создания списка и преобразования объектов к типу 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]
Списки имеют дополнительный метод:
list.sort(*, key=None, reverse=False)
:
Метод сортирует список на месте, используя только оператор <
сравнения между элементами. Исключения при сравнении не подавляются - если какие-либо операции сравнения завершатся неудачей, то вся операция сортировки завершится неудачей и список, скорее всего, останется в частично измененном состоянии.
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']