В программировании списки являются, пожалуй, такой же полезной структурой данных, как массивы. Что такое списки, как их создавать? Как работать со списками в Python? Об этом вы узнаете из нашей статьи.
Что такое списки (list) в Python?
Списки частично можно отождествлять с массивами, однако отличие и преимущество листингов (иначе их еще называют листинги) состоит в том, что они могут в себе сочетать разные типы данных. То есть листинг открывает больше возможностей для хранения какой-либо последовательности объектов. Переменная, именуемая списком, заключает в себе ссылку на структуру в памяти, в которой находятся ссылки на альтернативные структуры.
Список в Python – это упорядоченная коллекция объектов смешанных типов, которую можно изменять, и объекты в которой могут отличаться.
Что это значит? Давайте детально разберем определение.
Размер листинга можно изменять, уменьшать, добавлять в него новые строки. Также можно менять полностью структуру списка. Не стоит забывать, что каждый раз, когда используется какой-то метод в списке, меняется исходный список, а не его копия.
Для большей наглядности можно представить листинг в Python, как перечень продуктов, которые необходимо купить в магазине. Если при составлении плана покупок, все необходимые товары располагаются друг под другом, и каждый из них имеет свою собственную строку, то листинг в Python содержит все элементы через запятую и в квадратных скобках, чтобы Python смог понять, что здесь обозначается список. При этом элементы заключаются в кавычки. Это обязательное условие, потому что каждый элемент – это отдельная строка.
Способы создания списка
Переходя к классическому примеру, создадим список, который в дальнейшем будем использовать и изменять. Существует несколько способов образования листингов.
Одним из них является применение встроенной функции list( ). Для этого нужно обработать любой объект, поддающийся итерации (строку, кортеж или же существующий список). В данном случае, строку.
Вот, что получается в исходе:
>>> list('список') ['с', 'п', 'и', 'с', 'о', 'к']
Второй пример показывает, что списки могут содержать неограниченное число самых разных объектов. Также листинг может оставаться пустым.
>>> s = [] # Пустой список >>> l = ['s', 'p', ['isok'], 2] >>> s [] >>> l ['s', 'p', ['isok'], 2]
Следующим, третьим, способом образования листингов является так называемый генератор листингов.
Генератор листингов – это синтаксическая конструкция для создания листингов. Она схожа с циклом for.
>>> c = [c * 3 for c in 'list'] >>> c ['lll', 'iii', 'sss', 'ttt']
С его помощью можно также составлять более объемные конструкции:
>>> c = [c * 3 for c in 'list' if c != 'i'] >>> c ['lll', 'sss', 'ttt'] >>> c = [c + d for c in 'list' if c != 'i' for d in 'spam' if d != 'a'] >>> c ['ls', 'lp', 'lm', 'ss', 'sp', 'sm', 'ts', 'tp', 'tm']
Однако такой способ генерации не всегда эффективен при составлении множества листингов. Поэтому целесообразно использовать для генерации листингов цикл for.
Если необходимо обратиться к какому-либо элементу из списка, то используются индексы. У каждого элемента свой индекс.
Индекс – это номер элемента в списке.
Если требуется наполнить листинг повторяющимися, одинаковыми элементами используется символ *. Например, нужно добавить в листинг три одинаковых числа: [100] * 3.
Функции листингов
Функции – это, пожалуй, главное преимущество Python над другими языками программирования. К спискам можно применять основные встроенные функции.
Рассмотрим наиболее популярные из них:
- list(range( )) – если стоит задача создать последовательный список, то используется функция range. Эта функция имеет следующие формы:
- range(end). Применяется, когда необходимо создать листинг от нуля до конечного числа.
- range(start, end). Задается и начальное и конечное число.
- range(start, end, step). Параметром step задается характеристика выбора. Например, если нужно выбрать каждое пятое число из последовательности от 1 до 21, то полученный листинг будет иметь вид: [10,15, 20].
Функция range способна значительно сократить объем кода.
- len(list) – позволяет узнать, сколько элементов в списке.
- sorted(list, [key]) – сортирует объекты списка по возрастанию.
- max(list) – возвращает наибольший элемент.
- min(list) – противоположная функция – позволяет вернуть элемент с минимальным значением.
Также можно использовать другие встроенные функции:
- list(tuple) – преобразует объект кортежа в список.
- sum(list) – суммирует все элементы в списке, если все значения являются числами, применяется как к целым числам, так и к десятичным дробям. Однако она справляется не всегда корректно. Если в списке есть нечисловой элемент, функция выдаст ошибку: «TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’».
Методы листингов
Вернемся к нашему списку товаров, которые нужно купить в магазине и назовем его shoplist:
shoplist = []
Далее рассмотрим методы листингов:
- append(item) – с его помощью можно добавить элемент в список. При этом новый элемент будет находиться в конце.
Заполним наш новый листинг нужными продуктами:
shoplist.append(bread)
shoplist.append(milk)
- list.extend(A) – добавляет “список в список“. Эта функция позволяет сэкономить время, так как можно добавить несколько элементов одновременно. Допустим у нас уже есть листинг фруктов, нужно добавить их к основному списку.
shoplist.extend(fruits)
- insert(index, item) – вставляет на элемент с указанным индексом заданное значение перед указанным индексом.
- lcount(item) – показывает число повторений элемента.
- list.remove(item) – функция, противоположная list.append(x). С ее помощью можно удалить какой-либо элемент. Если выбранного элемента нет в списке, то сообщается об ошибке.
- pop([index]) – удаляет выбранный элемент и так же возвращает его. Если элемент не указан, то из списка удаляется последний.
- sort([key]) – ставит элементы в листинге в порядке возрастания, но также можно задать функцию.
- index(item) – показывает индекс первого выбранного элемента.
- Развернуть список, то есть зеркально вернуть все его элементы можно с помощью метода reverse(список). Последний элемент становится первым, предпоследний – вторым и так далее.
- Копия списка создается с командой copy(список).
- deepcopy(список) – глубокое копированию.
- Убрать все элементы листинга позволяет метод clear(список).
Стоит заметить, что методы листингов отличаются от строковых тем, что сразу изменяют список, то есть не нужно возвращать результат выполнения.
>>> l = [1, 2, 3, 5, 7] >>> l.sort() >>> l [1, 2, 3, 5, 7] >>> l = l.sort() >>> print(l) None
Далее пример работы со списками:
>>> a = [66.25, 333, 333, 1, 1234.5] >>> print(a.count(333), a.count(66.25), a.count('x')) 2 1 0 >>> a.insert(2, -1) >>> a.append(333) >>> a [66.25, 333, -1, 333, 1, 1234.5, 333] >>> a.index(333) 1 >>> a.remove(333) >>> a [66.25, -1, 333, 1, 1234.5, 333] >>> a.reverse() >>> a [333, 1234.5, 1, 333, -1, 66.25] >>> a.sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5]