Поиск по сайту:

Понимание кортежей в Python 3


Введение

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

Example Tuple
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')

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

Кортежи имеют значения в скобках ( ), разделенные запятыми ,. Пустые кортежи будут отображаться как coral =(), но кортежи даже с одним значением должны использовать запятую, как в coral=(синий коралл,).

Если мы print() кортеж выше, мы получим следующий вывод с кортежем, все еще типизированным скобками:

print(coral)
Output
('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')

Размышляя о кортежах Python и других структурах данных, которые являются типами коллекций, полезно учитывать все различные коллекции, которые есть на вашем компьютере: набор файлов, списки воспроизведения песен, закладки браузера, электронные письма, коллекцию видео. вы можете получить доступ к потоковому сервису и многое другое.

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

Предпосылки

У вас должен быть установлен Python 3 и настроена среда программирования на вашем компьютере или сервере. Если у вас не настроена среда программирования, вы можете обратиться к руководствам по установке и настройке среды программирования на вашем сервере, подходящей для вашей операционной системы (Ubuntu, CentOS, Debian и т. д.).

Индексирование кортежей

Как упорядоченная последовательность элементов, каждый элемент в кортеже может вызываться индивидуально посредством индексации.

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

Информация: Чтобы следовать примеру кода в этом руководстве, откройте интерактивную оболочку Python в вашей локальной системе, выполнив команду python3. Затем вы можете копировать, вставлять или редактировать примеры, добавляя их после приглашения >>>.

Для примера кортежа coral в начале этого руководства разбивка индекса выглядит следующим образом:

‘blue coral’ ‘staghorn coral’ ‘pillar coral’ ‘elkhorn coral’
0 1 2 3

Первый элемент, строка blue coral, начинается с индекса 0, а список заканчивается с индексом 3 элементом elkhorn coral.

Поскольку каждый элемент в кортеже Python имеет соответствующий порядковый номер, мы можем получить доступ к элементам.

Теперь мы можем вызвать дискретный элемент кортежа, обратившись к его порядковому номеру:

print(coral[2])
Output
pillar coral

Номера индексов для этого кортежа находятся в диапазоне от 03, как показано в таблице выше. Таким образом, чтобы вызвать любой из элементов по отдельности, мы будем обращаться к порядковым номерам следующим образом:

coral[0] = 'blue coral'
coral[1] = 'staghorn coral' 
coral[2] = 'pillar coral' 
coral[3] = 'elkhorn coral'

Если мы вызовем кортеж coral с любым порядковым номером, который больше 3, он выйдет за пределы допустимого диапазона, поскольку не будет допустимым:

print(coral[22])
Output
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])
Output
blue coral

Мы можем объединить строковые элементы в кортеже с другими строками, используя оператор +:

print('This reef is made up of ' + coral[1])
Output
This reef is made up of staghorn coral

Нам удалось соединить строковый элемент с порядковым номером 0 со строкой Этот риф состоит из . Мы также можем использовать оператор + для объединения двух или более кортежей.

С номерами индексов, которые соответствуют элементам в кортеже, мы можем получить доступ к каждому элементу кортежа дискретно.

Нарезка кортежей

Мы можем использовать индексацию, чтобы вызвать несколько элементов из кортежа. Срезы позволяют нам вызывать несколько значений, создавая диапазон номеров индексов, разделенных двоеточием [x:y].

Допустим, мы хотим напечатать только средние элементы coral, мы можем сделать это, создав срез.

print(coral[1:3])
Output
('staghorn coral', 'pillar coral')

При создании фрагмента, как и в [1:3], первый номер индекса — это место, где начинается фрагмент (включительно), а второй номер индекса — это место, где фрагмент заканчивается (исключая), поэтому в нашем примере выше элементы в позиции 1 и 2 — это элементы, которые распечатываются.

Если мы хотим включить любой конец списка, мы можем опустить одно из чисел в синтаксисе tuple[x:y]. Например, если мы хотим напечатать первые 3 элемента кортежа coral — это будут blue coral, staghorn coral, коралловый столб — мы можем сделать это, набрав:

print(coral[:3])
Output
('blue coral', 'staghorn coral', 'pillar coral')

Это напечатало начало кортежа, остановившись прямо перед индексом 3.

Чтобы включить все элементы в конец кортежа, мы должны изменить синтаксис:

print(coral[1:])
Output
('staghorn coral', 'pillar coral', 'elkhorn coral')

Мы также можем использовать отрицательные порядковые номера при нарезке кортежей, аналогично положительным порядковым номерам:

print(coral[-3:-1])
print(coral[-2:])
Output
('staghorn coral', 'pillar coral') ('pillar coral', 'elkhorn coral')

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

До сих пор мы опускали параметр шага, и Python по умолчанию использует шаг, равный 1, так что извлекается каждый элемент между двумя номерами индекса.

Синтаксис этой конструкции следующий: tuple[x:y:z], где z относится к шагу. Давайте составим список большего размера, затем нарежем его и присвоим шагу значение 2:

numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

print(numbers[1:11:2])
Output
(1, 3, 5, 7, 9)

Наша конструкция numbers[1:11:2] выводит значения между порядковыми номерами, включая 1 и исключая 11, затем значение шага 2 говорит программе распечатать только каждый второй элемент.

Мы можем опустить первые два параметра и использовать только шаг в качестве параметра с синтаксисом tuple[::z]:

print(numbers[::3])
Output
(0, 3, 6, 9, 12)

При печати кортежа numbers с шагом, установленным на 3, печатается только каждый третий элемент:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

Нарезка кортежей как с положительными, так и с отрицательными порядковыми номерами и указание шага дает нам контроль для получения результата, которого мы пытаемся достичь.

Объединение и умножение кортежей

Операторы могут использоваться для объединения или умножения кортежей. Конкатенация выполняется с помощью оператора +, а умножение выполняется с помощью оператора *.

Оператор + может использоваться для объединения двух или более кортежей. Мы можем присвоить значения двух существующих кортежей новому кортежу:

coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')
kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis')

coral_kelp = (coral + kelp)

print(coral_kelp)
Output
('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)
Output
('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')

Используя оператор *, мы можем реплицировать наши кортежи указанное количество раз, создавая новые кортежи на основе исходной последовательности данных.

Существующие кортежи можно объединять или умножать для формирования новых кортежей с помощью операторов + и *.

Функции кортежа

Есть несколько встроенных функций, которые можно использовать для работы с кортежами. Давайте посмотрим на некоторые из них.

лен()

Как и в случае со строками и списками, мы можем вычислить длину кортежа с помощью len(), где мы передаем кортеж в качестве параметра, например:

len(coral)

Эта функция полезна, когда вам нужно, например, установить минимальную или максимальную длину коллекции или сравнить секвенированные данные.

Если мы распечатаем длину наших кортежей kelp и numbers, мы получим следующий вывод:

print(len(kelp))
print(len(numbers))
Output
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(), чтобы найти самые высокие и самые низкие значения, содержащиеся в соответствующий кортеж.

Эти функции позволяют нам узнать информацию о количественных данных, таких как результаты тестов, температуры, цены и т. д.

Давайте посмотрим на кортеж, состоящий из поплавков:

more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57)

Чтобы получить max(), мы должны передать кортеж в функцию, как в max(more_numbers). Мы объединим это с функцией print(), чтобы мы могли выводить наши результаты:

print(max(more_numbers))
Output
95.59

Функция max() вернула наибольшее значение в нашем кортеже.

Точно так же мы можем использовать функцию min():

print(min(more_numbers))
Output
11.12

Здесь в кортеже был найден наименьший поплавок и распечатан.

Как и в случае с функцией len(), функции max() и min() могут быть очень полезны при работе с кортежами, которые содержат много ценности.

Чем кортежи отличаются от списков

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

Однако вы можете объединить 2 или более кортежей, чтобы сформировать новый кортеж.

Давайте рассмотрим наш кортеж coral:

coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral')

Допустим, мы хотим заменить элемент синий коралл другим элементом с именем черный коралл. Если мы попытаемся изменить этот вывод так же, как и со списком, набрав:

coral[0] = 'black coral'

В качестве вывода мы получим ошибку:

Output
TypeError: 'tuple' object does not support item assignment

Это связано с тем, что кортежи не могут быть изменены.

Если мы создадим кортеж и решим, что нам действительно нужен список, мы можем преобразовать его в список. Чтобы преобразовать кортеж в список, мы можем сделать это с помощью list():

list(coral)

И теперь наш тип данных coral будет списком:

coral = ['blue coral', 'staghorn coral', 'pillar coral']

Мы видим, что кортеж был преобразован в список, потому что круглые скобки изменились на квадратные.

Точно так же мы можем преобразовать списки в кортежи с помощью tuple().

Вы можете узнать больше о преобразовании типов данных, прочитав «Как преобразовать типы данных в Python 3».

Заключение

Тип данных tuple — это последовательный тип данных, который нельзя изменить, предлагая оптимизацию для ваших программ, поскольку он является несколько более быстрым типом, чем списки для обработки Python. Когда другие сотрудничают с вами над вашим кодом, использование вами кортежей покажет им, что вы не намерены изменять эти последовательности значений.

В этом руководстве были рассмотрены основные функции кортежей, включая индексирование, нарезку и объединение кортежей, а также показаны доступные встроенные функции.