Кортежи (tuple) в Python: методы, создание, сортировка, сравнение, добавление элементов / Skillbox Media
База «змееуста»: работаем с индексами, сравниваем и перебираем элементы.
Содержание:
Курс с трудоустройством: «Профессия Python-разработчик»
Узнать большеКортежи (tuple) в Python хранят последовательности элементов, и этим они похожи на списки. Но между этими двумя структурами есть серьёзные различия. Сегодня мы разберёмся в них и научимся работать с кортежами.
Вы узнаете:
- Что такое кортежи
- Когда их использовать
- Как работать с кортежами в Python
- Как их создать
- Как получить доступ к элементу по индексу
- Как упаковать и распаковать кортеж
- Как их сравнить между собой
- Как проверить принадлежность элемента
- Как перебрать элементы кортежа
- Как удалить кортеж
- Как их сложить и перемножить
- Какие функции для них существуют
- Определение длины, суммы, минимального и максимального элемента
- Сортировка кортежа
- Срезы для получения элементов
- Преобразование кортежа в другие типы данных
- Изменение элементов кортежа
Что такое кортежи
Кортежи (тип tuple) — это неизменяемый тип данных в Python, который используется для хранения упорядоченной последовательности элементов.
У этих коллекций есть три замечательных свойства:
Неизменяемость. После того как кортеж создан, в него нельзя добавлять элементы, а также изменять их или удалять. При попытке это сделать интерпретатор выдаст ошибку TypeError.
Упорядоченность. Элементы кортежа располагаются в определённом порядке, который тоже неизменяем. К любому элементу можно обратиться по его индексу (порядковому номеру).
Элементами кортежа могут быть объекты разных типов данных: числа, строки, списки, другие кортежи и другие. Элементы-коллекции могут иметь неограниченную глубину вложенности. Например, кортеж может включать в себя список, который будет содержать другой список, который вновь будет содержать список и так далее.
Кортежи записываются с использованием круглых скобок ():
my_tuple — имя переменной, которой присваивается кортеж.
(значение1, значение2…) — это сам кортеж, который содержит элементы значение1, значение2 и так далее.
Они могут состоять из элементов разных типов и их сочетаний:
Когда использовать кортеж
Применение кортежей связано с их свойствами — неизменяемостью и строгим порядком элементов. Разберём ситуации, когда это полезно.
Если нужно защитить данные от случайного или намеренного изменения, то можно использовать кортежи. Например, этот тип данных подойдёт для сохранения информации о датах рождения клиентов.
Обратите внимание: неизменяемость кортежей не абсолютна. У неё есть исключение — если внутри кортежа находятся изменяемые элементы, например списки, словари или множества, то их значения можно изменить.
Например:
Результат выполнения кода:
Как видите, никакой ошибки нет, хотя кортеж изменился.
Кортежи занимают в памяти меньше места, чем списки. Это легко проверить:
В результате выполнения кода получим:
Кортеж занимает в памяти на 16 байт меньше, чем список. Из-за малой величины сравниваемых объектов разница почти незаметна, но при работе с данными большего объёма экономия может быть значимой.
Кортежи идеально подходят для использования в качестве ключей в словарях, так как ключи в них должны быть объектами неизменяемого типа данных. Проверим это:
В результате получим:
С кортежем словарь работает. Если попытаться в качестве ключа использовать список, то возникнет ошибка, так как списки — изменяемый тип данных.
Как работать с кортежами в Python
Рассмотрим основные операции с кортежами.
Создать кортеж в Python можно по меньшей мере пятью способами. Рассмотрим каждый из них.
- С помощью круглых скобок:
- Без круглых скобок:
- Используя встроенную функцию tuple():
- С помощью оператора упаковки, который мы разберём дальше:
- Из итерируемого элемента, например строки, с помощью функции tuple():
Можно создать пустой кортеж:
Если требуется кортеж, состоящий всего из одного элемента, то после элемента необходимо обязательно поставить запятую:
Кортеж — это упорядоченная последовательность. Поэтому для доступа к его элементам можно использовать индексы.
Индексация начинается с нуля и заканчивается значением, равным длине кортежа, уменьшенным на единицу:
Для доступа к элементам с конца кортежа можно использовать отрицательные индексы. В этом случае индексация начинается с -1 и заканчивается значением, равным длине кортежа со знаком минус.
Напишем код:
Чтобы обратиться ко вложенным элементам, используйте двойную индексацию:
Разберём код. Кортеж nested_tuple содержит вложенный кортеж (3, 4). Для доступа к элементам вложенного кортежа используем двойную индексацию: nested_tuple[2][0] обращается к первому элементу вложенного кортежа, а nested_tuple[2][1] обращается ко второму элементу.
Упаковка (packing) и распаковка (unpacking) — это операции, которые позволяют создавать кортеж из набора значений и извлекать значения из кортежа в переменные. Рассмотрим их подробнее.
Упаковка кортежа. Значения 1, 2, 3 и ‘hello’ автоматически упаковываются в кортеж:
Распаковка кортежа. Элементы кортежа извлекаются в переменные:
Обмен значениями между переменными. С помощью упаковки и распаковки кортежей можно обменять значения переменных между собой без использования временной переменной.
Посмотрим пример кода:
Операция упаковки (y, x) сначала создаёт кортеж из двух значений (10, 5), затем операция распаковки (x, y) распаковывает кортеж и присваивает значения переменным x и y соответственно. Теперь переменная x содержит 10, а y содержит 5.
Кортежи в Python сравниваются покомпонентно начиная с первого элемента до первого неравенства или до конца переменной. Если кортежи имеют одинаковую длину и все соответствующие элементы равны, то они считаются равными:
Для сравнения используются стандартные операторы ==, !=, >, <, >=, <=.
При сравнении используются правила:
- когда сравниваются числовые элементы, большим считается тот кортеж, у которого первый отличающийся элемент больше;
- когда сравниваются строки, сравнение происходит по порядку в алфавите;
- элементы различных типов сравнивать нельзя — получим ошибку TypeError;
- если длины кортежей различны, то кортеж с меньшей длиной считается наименьшим.
Пример:
Чтобы проверить, принадлежит ли элемент кортежу, используется оператор in. Если элемент присутствует в кортеже, оператор возвращает True, в противном случае — False.
Для перебора элементов кортежа в Python используется цикл for или while:
Код выводит каждый элемент кортежа my_tuple на новой строке.
Удалять из кортежа элементы нельзя, но можно удалить его полностью с помощью ключевого слова del:
В этом примере del my_tuple удаляет ссылку на кортеж из памяти. После этого переменной my_tuple больше не существует и попытка обратиться к ней вызовет ошибку NameError.
В Python для кортежей доступны операции конкатенации (сложения) и повторения (умножения). Эти операции могут использоваться при создании новых кортежей на основе существующих.
Конкатенация. Это объединение двух кортежей в один новый кортеж с помощью оператора +.
Напишем код:
Результат:
Повторение. Этот способ создания кортежа напоминает арифметическое умножение: справа от исходного кортежа нужно добавить оператор * и указать, сколько раз он повторится.
Результат выполнения кода:
При выполнении операций конкатенации и повторения создаются новые кортежи, а исходные остаются неизменными.
Функции кортежей Python
В Python есть встроенные функции, которые облегчают работу с кортежами.
Во многих статьях можно встретить формулировку «методы кортежей», но это не совсем корректно. Метод — это понятие из объектно-ориентированного программирования, обозначающее функцию или процедуру, принадлежащую к какому-либо классу или объекту. Ниже мы говорим про функции, которые принимают и возвращают значения, без привязки к классам или объектам.
Длину кортежа можно получить функцией len(), которая возвращает количество элементов в кортеже:
Результат:
Сумма элементов рассчитывается легко запоминающейся функцией sum():
Результат:
Если кортеж пуст, len() и sum() возвращают 0.
Минимальный и максимальный элементы кортежа можно получить с помощью функций min() и max():
Результат выполнения:
Если кортеж пуст, то использование функций min() и max() вызовет ошибку ValueError.
Во многих статьях можно встретить формулировку «методы кортежей», но это не совсем корректно. Метод — это понятие из объектно-ориентированного программирования, обозначающее функцию или процедуру, принадлежащую к какому-либо классу или объекту. Ниже мы говорим про функции, которые принимают и возвращают значения, без привязки к классам или объектам.
Элементы можно отсортировать по возрастанию или по убыванию. Так как кортежи относятся к неизменяемому типу данных, то кортеж с упорядоченными элементами нужно будет сохранить в новой переменной.
Для сортировки используется функция sorted():
Результат:
Остановимся на коде:
- sorted(original_tuple) создаёт новый список, содержащий отсортированные элементы из original_tuple;
- tuple(…) создаёт новый кортеж из отсортированного списка.
Если нужна сортировка в обратном порядке, в функции sorted() используется параметр reverse=True:
Получаем:
Срезы используются для извлечения из кортежей подмножества элементов. Для этого необходимо указать начальный и конечный индекс, а также шаг среза.
Для определения начала и конца среза можно использовать положительные и отрицательные индексы:
- левый индекс указывает на элемент, с которого начинается срез;
- правый индекс указывает на элемент, которым заканчивается срез, этот элемент в срез не включается.
Получим срез, указав положительные индексы:
Результат:
Срез с отрицательными индексами:
Результат:
Если индексы пропущены, то срез будет включать все элементы от начала кортежа до заданного конца среза или от заданного начала среза до конца кортежа:
Результат:
В Python можно преобразовывать кортежи в другие типы данных: списки, строки, множества или словари.
Так можно превратить кортеж в список:
Результат:
А так можно преобразовать кортеж в строку:
Здесь использовали встроенную функцию str.join. Работает она просто — переводит каждый элемент кортежа в строковый тип, а затем объединяет их в одну строку.
Результат:
Преобразовать кортеж во множество:
Результат:
Множества — это неупорядоченные коллекции, которые состоят из уникальных элементов. Если преобразовать кортеж во множество, то все дубликаты в нём удалятся.
Кортеж в словарь (пары «ключ — значение»):
Результат:
Хотя кортежи относятся к неизменяемым элементам, есть трюк, который позволяет их изменять. Для этого нужно перевести кортеж в список, сделать необходимые преобразования, а затем превратить полученный список в кортеж:
Результат:
Другой подоход — создать новый кортеж с изменёнными значениями:
Результат:
В этом примере создаём новый кортеж updated_tuple, включая все элементы кортежа my_tuple с начала до второго, добавляем к ним новое значение 10, а затем добавляем все элементы my_tuple начиная с четвёртого и до конца.
Мы рассмотрели только базовые понятия и операции с кортежами. Если вы хотите погрузиться в работу с ними глубже, то советуем перейти к документации. И обязательно пишите код из примеров в своём редакторе кода или IDE — это поможет закрепить теорию.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!
Читайте также:
- Словари в Python: что нужно знать и как пользоваться
- История чат-ботов: от Shoebox до ChatGPT
- Методы и функции строк в Python
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!