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

Вступление

tuple в Python выглядит так:

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

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

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

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

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

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

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

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

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

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

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

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

«Голубой коралл» 'кораллы из оленьего рога' "коралловый столб" 'коралловый лосось'

0

1

2

3

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

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

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

print(coral[2])
Outputpillar coral

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

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

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

print(coral[22])
OutputIndexError: tuple index out of range

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

Для того же кортежаcoral разбивка отрицательного индекса выглядит так:

"синий коралл" 'кораллы из оленьего рога' "коралловый столб" 'коралловый лосось'

-4

-3

-2

-1

Итак, если мы хотим распечатать элемент'blue coral', используя его отрицательный порядковый номер, мы можем сделать это следующим образом:

print(coral[-4])
Outputblue coral

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

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

Нам удалось объединить строковый элемент с номером индекса0 со строкой'This reef is made up of '. Мы также можем использовать оператор+ дляconcatenate 2 or more tuples together.

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

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

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

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

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

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

Если мы хотим включить любой конец списка, мы можем опустить одно из чисел в синтаксисеtuple[x:y]. Например, если мы хотим напечатать первые 3 элемента кортежаcoral - это будет'blue coral','staghorn coral','pillar 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')

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

До сих пор мы опускали параметр шага, и 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

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

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

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

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

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(), где мы передаем кортеж в качестве параметра, как в:

len(coral)

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

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

print(len(kelp))
print(len(numbers))
Output4
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 ()

Когда мы работаем с кортежами, состоящими из числовых элементов (включаяintegers иfloats), мы можем использовать функции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))
Output95.59

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

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

print(min(more_numbers))
Output11.12

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

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

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

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

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

Рассмотрим наш кортежcoral:

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

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

coral[0] = 'black coral'

Мы получим ошибку как наш вывод:

OutputTypeError: 'tuple' object does not support item assignment

Это потому, что кортежи не могут быть изменены.

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

list(coral)

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

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

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

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

Вы можете узнать больше о преобразовании типов данных, прочитав “https://www.digitalocean.com/community/tutorials/how-to-convert-data-types-in-python-3[How для преобразования типов данных в Python 3] «.

Заключение

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

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