Списки и кортежи в Python
Список в Python - это набор элементов, следующих в определенном порядке. Списки позволяют хранить в одном месте данные, сколько бы их не было, один элемент или тысяча элементов. В список можно поместить любую информацию, даже не связанную между собой. Так как список обычно содержит более одного элемента, рекомендуется называть их именем во множественном лице. Списки могут динамически изменять свои размеры, увеличиваясь и изменяясь во время выполнения программы. Кортежи в отличие от списков изменяться не могут. Длина кортежа определяется количеством элементов в нем, и в процессе выполнения программы изменяться не может. Списки и кортежи обладают многими общими возможностями.
1. Создание списка в Python.
В языке Python список обозначается квадратными скобками [ ]. В списках обычно хранятся однородные данные, то есть значения одного типа. Пример списка из пяти элементов.
cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
Так же в списках можно хранить разнородные данные, то есть разных типов. Например, в следующем списке хранится имя студента(строка), фамилия(строка), его средняя оценка(float), год окончания заведения(int)
id = [ 'Jon', 'Bond', 3.54, 2020 ]
2.1. Обращение к элементам списка Python.
Списки представляют собой упорядоченные наборы данных, поэтому для обращения к элементу списка, нужно сообщить Python позицию(индекс) элемента. Для этого в начале укажите имя списка, а затем индекс элемента в квадратных скобках [ ].
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars
['audi', 'bmw', 'ford', 'kia', 'land rover']
>>> cars[1]
'bmw'
>>> cars[1].title()
'Bmw'
В первом случае выводится элемент с индексом 1. Во втором случае выводится этот же элемент с заглавной буквы, с помощью метода title().
2.2. Индексы начинаются с 0, а не с 1.
В Python, как и во многих других языках, первый элемент имеет индекс 0, а не 1. Если при выполнении программы, вы получили неожиданный результат, то проверьте не допустили ли вы ошибку по смещению на 1. Второй элемент списка идет под индексом 1. Например, чтобы обратиться к третьему элементу списка, следует запросить элемент с номером 2. В следующем примеры выводятся элементы с индексом 1 и 3.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars[1]
'bmw'
>>> cars[3]
'kia'
>>> cars[-1]
'land rover'
>>> cars[-3]
'ford'
В Python есть возможность для обращения сразу к последнему элементу списка. Для этого нужно запросить элемент с индексом [-1]. Этот синтаксис так же распространяется и на другие отрицательные значения индексов. Индекс [-3] возвращает третий элемент с конца, и т.д.
3.1. Использование элементов списка в строках.
Отдельные элементы списков могут использоваться для построения сообщений. Для этого можно воспользоваться f-строками. Возьмем предыдущий список автомобилей и извлечем из него один элемент.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> message = f" Мой первый автомобиль {cars[2].title()}."
>>> print(message)
Мой первый автомобиль Ford.
В результате строится сообщение, в котором используется элемент с индексом 2 и сохраняется в переменной.
3.2. Использование элементов списка в выражениях.
Элементы списка могут так же использоваться как переменные в выражениях. Предположим, есть список каких-то чисел и вам нужно проделать с ними арифметические операции.
>>> a = [1, 5, 70, 4, 28]
>>> a[0] + a[2]
71
>>> a[2] / a[1]
14.0
4.1. Изменение элементов в списке Python.
Как правило вы будете создавать динамические списки. Это означает, что во время выполнения программы элементы будут добавляться и удалятся. Изменение элементов в списке Python напоминает синтаксис обращения к элементу списка. Для того чтобы изменить элемент, укажите имя списка и индекс изменяемого элемента в квадратных скобках [ ], затем задайте новое значение, которое присвоится этому элементу. Например, в нашем списке машин мы хотим поменять бренд 'ford' на 'opel'.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars [2] = 'opel'
>>> cars
['audi', 'bmw', 'opel', 'kia', 'land rover']
4.2. Добавление элементов в конец списка Python. Метод append().
Самый простой способ добавление элемента в список - это присоединение его в конец списка. Для этого используется метод append(). Метод append() присоединяет элемент в конец списка, при этом остальные элементы списка не изменяются и не сдвигаются.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars.append('opel')
>>> print(cars)
['audi', 'bmw', 'ford', 'kia', 'land rover', 'opel']
Если вы хотите начать с пустого списка и добавлять в него элементы, то так же рекомендуется использовать метод append(). Данные, которые захочет сохранить пользователь часто не известны после запуска программы. Создайте для него пустой список, а затем присоединяйте новые данные.
>>> cars = [ ]
>>> cars.append('audi')
>>> cars.append('bmw')
>>> cars.append('kia')
>>> cars.append('land rover')
>>> print(cars)
['audi', 'bmw', 'kia', 'land rover']
4.3. Вставка элемента в список Python. Метод insert().
Для вставки элемента в определенную позицию списка существует метод insert(). Для этого следует указать индекс и значение нового элемента.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars.insert(0, 'opel')
>>> print(cars)
['opel', 'audi', 'bmw', 'ford', 'kia', 'land rover']
В этом примере значение 'opel' вставляется в начало списка, а все остальные значения при этом сдвигаются на одну позицию индекса.
4.4. Удаление элемента в списке командой del().
Если вы знаете индекс элемента, который нужно удалить, то легко можно воспользоваться командой del(). Команда del() позволяет удалить любой элемент из любой позиции списка.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> del cars[2]
>>> print(cars)
['audi', 'bmw', 'kia', 'land rover']
>>> del cars[0]
>>> print(cars)
['bmw', 'kia', 'land rover']
При выполнении команды del() элемент удаляется навсегда.
4.5. Удаление элемента списка с использованием метода pop().
Не всегда требуется удаление элемента из списка навсегда. Например, в веб-приложение пользователь из списка активных участников, переходит в список не активных. Метод pop() удаляет элемент из списка, но позволяет с ним еще работать после удаления.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> sale = cars.pop(3)
>>> print(f"Автомобиль марки {sale.title()} сегодня был продан.")
Автомобиль марки Kia сегодня был продан.
>>> cars
['audi', 'bmw', 'ford', 'land rover']
Сначала элемент извлекается из списка методом pop() и сохраняется в переменной sale. Затем эта переменная уже используется для вывода сообщения с помощью f-строки.
После каждого использования метода pop() элемент удаляется из списка.
4.6. Удаление элементов списка по значению. Метод remove()
Когда индекс удаляемого элемента не известен, но вы знаете значение этого элементы, можно воспользоваться методом remove(). Предположим, нам нужно удалить из списка автомобиль ford. Ниже в примере значение ford удаляется из списка.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars.remove('ford')
>>> cars
['audi', 'bmw', 'kia', 'land rover']
Важно: Метод remove() удаляет только первое вхождение заданного значение в списке. Если в списке значения могут повторяться, то нужно воспользоваться циклом для перебора.
4.7. Очистка списка. Метод clear().
Чтобы удалить все элементы списка используйте метод clear().
>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> cars.clear()
>>> print(cars)
[]
5.1. Постоянная сортировка списка методом sort().
Списки в Python легко отсортировать. Для этого есть метод sort(). Данный метод сортирует элементы по алфавиту. Если список состоит из чисел, то отсортирует их по возрастанию.
>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> cars.sort()
>>> print(cars)
['audi', 'bmw', 'ford', 'land rover', 'opel']
>>> a = [ 560, 25, 452, 14, 945, 643, 1, -42, -5 ]
>>> a.sort()
>>> print(a)
[-42, -5, 1, 14, 25, 452, 560, 643, 945]
Чтобы отсортировать список по убыванию, в методе sort() используйте не обязательный аргумент reverse.(reverse=True)
>>> cars.sort(reverse=True)
>>> print(cars)
['opel', 'land rover', 'ford', 'bmw', 'audi']
Метод sort() изменяет список и вернутся к исходному порядку не получится.
5.2. Временная сортировка списка функцией sorted().
Для того чтобы исходный список не менялся, но для удобства работы вы могли получить отсортированный список, существует функция sorted(). Функция sorted() возвращает список в отсортированном порядке.
>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> print(sorted(cars))
['audi', 'bmw', 'ford', 'land rover', 'opel']
>>> print(cars)
['ford', 'opel', 'audi', 'land rover', 'bmw']
На примере видно, что исходный список cars остался прежним и не изменился.
6. Определение длины списка. Функция len().
Для того чтобы быстро определить длину списка используйте функцию len().
>>> cars = [ 'ford', 'opel', 'audi', 'land rover', 'bmw' ]
>>> print(len(cars))
5
7. Ошибки при работе со списками Python
Одна из основных ошибок при работе со списками, это ошибка индексирования. Например, вы пытаетесь вернуть элемент с индексом 5. В результате Python при работе со списком не находит элемент с этим индексом, происходит ошибка индексирования.
>>> cars = [ 'audi', 'bmw', 'ford', 'kia', 'land rover' ]
>>> cars [5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Индекс должен быть целым числом или выражением, дающим целочисленный результат. При попытке использования нецелочисленного индекса происходит ошибка TypeError. Так же ошибка индексирования образуется при попытке обратиться к элементу пустого списка.
8. Кортежи в Python.
Когда требуется создать не изменяемый список, на помощь приходят кортежи. В кортежах часто хранятся разнородные данные, но данные также могут быть однородными. Длина кортежа определяется количеством элементов в кортеже и не может меняться во время выполнения программы. Кортеж выглядит как список, но вместо квадратных скобок используются круглые ( ). При выводе кортежа Python отображает его содержимое в круглых скобках. Для упаковки элементов в кортеж можно перечислить их через запятую.
>>> student = ()
>>> len(student)
0
>>> student = 'Ivan', 'Ivanov', 3.5
>>> print(student)
('Ivan', 'Ivanov', 3.5)
>>> print(student[1])
Ivanov
Обращаться к отдельным элементам можно по индексам также как и в списках. Попробуем изменить один элемент кортежа и посмотрим, что произойдет.
>>> student[1] = 'Petrov'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Когда вы захотите изменить элемент в кортеже, Python выдаст ошибку о невозможности изменения элементов. TypeError: 'tuple' object does not support item assignment.
Далее: Сегментация последовательностей
Назад: Строки и функция print в Python