Site icon 8HOST.COM

Кортежи в Python 3

Кортеж имеет такой вид:

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

Заключение

Кортежи – это неизменяемый последовательный тип данных, с помощью которого можно оптимизировать код программы. При помощи кортежа также можно сообщить другим разработчикам команды, что тот или иной блок данных изменять не следует.

Теперь вы знакомы с основными функциями кортежей и умеете выполнять базовые операции с ними (например, конкатенацию, умножение, срезы и т.п.).