Кортеж имеет такой вид:
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
Кортеж – это неизменяемый тип данных, который представляет собой упорядоченную последовательность элементов.
Кортежи позволяют группировать данные. Значения в кортеже называются элементами.
Все элементы кортежа берутся в круглые скобки () и разделяются запятыми. Пустой кортеж имеет такой вид:
coral = ()
Даже если в кортеже всего одно значение, нужно поставить запятую:
coral = ('blue coral',)
Если отобразить приведённый выше пример кортежа с помощью print(), на экране появится:
print(coral)
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
Чтобы лучше представить себе кортеж Python (или другой коллекционный тип данных), полезно вспомнить те коллекции и совокупности данных, что есть на вашем компьютере: файлы, плейлисты, закладки браузера, переписку и т.п.
Кортежи похожи на списки, но, в отличие от последних, они неизменяемы, то есть их нельзя редактировать.
Читайте также: Работа со списками в Python 3
Используя кортеж в коде программы, вы можете сообщить о том, что та или иная последовательность данных не должна изменяться. Кортежи позволяют оптимизировать код, поскольку в Python они обрабатываются немного быстрее, чем списки.
Индексация кортежей
Каждый элемент в кортеже, как и в любой другой упорядоченной последовательности, можно вызвать по его индексу.
Каждому элементу присваивается уникальный индекс (целое число). Индексация начинается с 0.
Вернёмся к кортежу coral и посмотрим, как проиндексированы его элементы:
‘blue coral’ | ‘staghorn coral’ | ‘pillar coral’ | ‘elkhorn coral’ |
0 | 1 | 2 | 3 |
Первый элемент (‘blue coral’) идёт под индексом 0, а последний (‘elkhorn coral’) – под индексом 3.
При помощи индекса можно вызвать каждый отдельный элемент кортежа. Например:
print(coral[2])
pillar coral
Диапазон индексов данного кортежа – 0-3. Таким образом, чтобы вызвать любой из элементов в отдельности, можно сослаться на индекс.
coral[0] = 'blue coral'
coral[1] = 'staghorn coral'
coral[2] = 'pillar coral'
coral[3] = 'elkhorn coral'
Если вызвать индекс вне диапазона данного кортежа (в данном случае это индекс больше 3), Python выдаст ошибку:
print(coral[22])
IndexError: tuple index out of range
Также в кортежах можно использовать отрицательные индексы; для этого подсчёт ведётся в обратном направлении с конца кортежа, начиная с -1. Отрицательная индексация особенно полезна, если вы хотите определить последний элемент в конце длинного кортежа.
Кортеж coral будет иметь такие отрицательные индексы:
‘blue coral’ | ‘staghorn coral’ | ‘pillar coral’ | ‘elkhorn coral’ |
-4 | -3 | -2 | -1 |
Чтобы запросить первый элемент, ‘blue coral’, по отрицательному индексу, нужно ввести:
print(coral[-4])
blue coral
Элементы кортежа можно склеивать со строками при помощи оператора +:
print('This reef is made up of ' + coral[1])
This reef is made up of staghorn coral
Также оператор + позволяет склеить два кортежа (больше информации об этом – дальше в статье).
Срез кортежа
Срез позволяет вызывать несколько значений кортежа в диапазоне [start:stop] (start – включительно, stop – исключительно).
К примеру, чтобы вызвать элементы кортежа с индексом 1 и 2, нужно ввести:
print(coral[1:3])
('staghorn coral', 'pillar coral')
Как видите, первый элемент (1) включается в диапазон, а последний (3) исключается из него. Потому на экране появляются элементы 1 и 2.
Чтобы включить в срез начало или конец кортежа, можно опустить индекс первого или последнего её символа соответственно. К примеру, чтобы вывести только первые три элемента, можно ввести:
print(coral[:3])
('blue coral', 'staghorn coral', 'pillar coral')
Чтобы вывести последние три элемента кортежа coral, нужно ввести:
print(coral[1:])
('staghorn coral', 'pillar coral', 'elkhorn coral')
В срезах можно использовать отрицательные индексы.
print(coral[-3:-1])
print(coral[-2:])
('staghorn coral', 'pillar coral')
('pillar coral', 'elkhorn coral')
Третий параметр среза – это шаг:
tuple[start:stop:stride]
Этот параметр указывает, на сколько элементов нужно продвинуться после взятия первого элемента. По умолчанию шаг в Python равен 1, то есть, Python будет извлекать элементы по порядку.
Попробуйте создать большой кортеж и создать срез с шагом:
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
print(numbers[1:11:2])
(1, 3, 5, 7, 9)
Конструкция numbers[1:11:2] выводит каждый второй элемент кортежа, начиная с индекса 1 (включительно) и заканчивая индексом 11 (исключительно).
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Можно пропустить первые два параметра и использовать только шаг:
print(numbers[::3])
(0, 3, 6, 9, 12)
Теперь в срез войдёт каждый третий элемент кортежа, начиная с первого элемента:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
Конкатенация и умножение кортежей
Читайте также: Математические вычисления в Python 3
Выполнить конкатенацию или умножение кортежа можно с помощью различных операторов. Для конкатенации используется оператор +, а для умножения – оператор *.
Посмотрим, как работает оператор +, который позволяет склеить два или больше кортежей в новый кортеж.
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
coral_kelp = (coral + kelp)
print(coral_kelp)
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
Оператор + объединяет кортежи и таким образом создаёт новый кортеж, однако он не может изменять существующие кортежи.
Оператор * позволяет умножать кортежи. Умножение используется, если, к примеру, вам нужно скопировать файлы в другой каталог или поделиться плейлистом с друзьями.
Попробуйте умножить кортеж coral на 2, а kelp – на 3. Присвойте полученный результат новым кортежам.
multiplied_coral = coral * 2
multiplied_kelp = kelp * 3
print(multiplied_coral)
print(multiplied_kelp)
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
('wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
Оператор * позволяет реплицировать кортеж указанное количество раз и создавать новые кортежи на основе исходных данных.
Функции кортежей
Python предоставляет несколько встроенных функций для работы с кортежами.
Функция len()
Функция len() позволяет вычислить длину кортежа (как и в случае со строками и списками).
len(coral)
Эта функция помогает обеспечить соблюдение минимальной или максимальной длины кортежа. Также она позволяет сравнивать последовательные данные.
Попробуйте вывести длину кортежей kelp и numbers:
print(len(kelp))
print(len(numbers))
4
13
В кортеже kelp 4 элемента:
kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')
А в numbers их 13.
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
Функция len() очень полезна при работе с большими кортежами.
Функции max() и min()
При работе с кортежами, состоящими из числовых элементов (как целых, так и с плавающей точкой), функции max() и min() помогают найти самое высокое и самое низкое значение кортежа.
Эти функции полезны при работе с количественными данными (такими как результаты тестов, температура, цены и т.д.).
Рассмотрим кортеж из чисел с плавающей точкой:
more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57)
Чтобы вывести на экран максимальное значение, нужно передать кортеж функции max(), а затем объединить её с print():
print(max(more_numbers))
95.59
Аналогичным образом работает функция min():
print(min(more_numbers))
11.12
Как и len(), функции max() и min() будут очень полезными при работе с большим количеством данных.
Чем кортежи отличаются от списков?
Первое отличие между кортежами и списками состоит в том, что кортежи являются неизменяемым типом данных. это значит, что в кортежах нельзя добавлять, изменять или удалять элементы, а в списках – можно.
Однако вы можете объединить два или больше кортежа в новый кортеж
Рассмотрим кортеж coral:
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
К примеру, вы хотите заменить элемент ‘blue coral’ новым элементом, ‘black coral’. Попробуйте изменить его так, как вы сделали бы это со списком:
coral[0] = 'black coral'
Вы получите ошибку:
TypeError: 'tuple' object does not support item assignment
Если же вы создали кортеж и поняли, что на самом деле вам нужен список, вы можете преобразовать кортеж в список с помощью функции list():
list(coral)
Теперь coral – список, а не кортеж:
coral = ['blue coral', 'staghorn coral', 'pillar coral']
Обратите внимание на скобки: теперь они квадратные, а не круглые, а это значит, что кортеж преобразовался в список.
Чтобы преобразовать список в кортеж, используйте функцию tuple().
Читайте также: Преобразование типов данных в Python 3
Заключение
Кортежи – это неизменяемый последовательный тип данных, с помощью которого можно оптимизировать код программы. При помощи кортежа также можно сообщить другим разработчикам команды, что тот или иной блок данных изменять не следует.
Теперь вы знакомы с основными функциями кортежей и умеете выполнять базовые операции с ними (например, конкатенацию, умножение, срезы и т.п.).