Понимание кортежей в Python 3
Введение
Кортеж — это структура данных, представляющая собой неизменяемую или неизменяемую упорядоченную последовательность элементов. Поскольку кортежи неизменяемы, их значения нельзя изменить. Ниже приведен пример кортежа, состоящего из четырех элементов:
Example Tuplecoral = ('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])
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
разбивка отрицательного индекса выглядит следующим образом:
‘blue coral’ | ‘staghorn coral’ | ‘pillar coral’ | ‘elkhorn 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
со строкой Этот риф состоит из
. Мы также можем использовать оператор +
для объединения двух или более кортежей.
С номерами индексов, которые соответствуют элементам в кортеже, мы можем получить доступ к каждому элементу кортежа дискретно.
Нарезка кортежей
Мы можем использовать индексацию, чтобы вызвать несколько элементов из кортежа. Срезы позволяют нам вызывать несколько значений, создавая диапазон номеров индексов, разделенных двоеточием [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))
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()
, чтобы найти самые высокие и самые низкие значения, содержащиеся в соответствующий кортеж.
Эти функции позволяют нам узнать информацию о количественных данных, таких как результаты тестов, температуры, цены и т. д.
Давайте посмотрим на кортеж, состоящий из поплавков:
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()
могут быть очень полезны при работе с кортежами, которые содержат много ценности.
Чем кортежи отличаются от списков
Основное отличие кортежей от списков заключается в том, что их нельзя изменить. Это означает, что элементы нельзя добавлять в кортежи или удалять из них, а элементы нельзя заменять внутри кортежей.
Однако вы можете объединить 2 или более кортежей, чтобы сформировать новый кортеж.
Давайте рассмотрим наш кортеж coral
:
coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn 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()
.
Вы можете узнать больше о преобразовании типов данных, прочитав «Как преобразовать типы данных в Python 3».
Заключение
Тип данных tuple — это последовательный тип данных, который нельзя изменить, предлагая оптимизацию для ваших программ, поскольку он является несколько более быстрым типом, чем списки для обработки Python. Когда другие сотрудничают с вами над вашим кодом, использование вами кортежей покажет им, что вы не намерены изменять эти последовательности значений.
В этом руководстве были рассмотрены основные функции кортежей, включая индексирование, нарезку и объединение кортежей, а также показаны доступные встроенные функции.