Баннер мобильный (3) Пройти тест

Tuples (кортежи) для хранения данных в Python

Разбираем методы кортежей на практических примерах

Инструкция

19 июня 2025

Поделиться

Скопировано
Tuples (кортежи) для хранения данных в Python

Содержание

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

    Что такое кортеж в Python 

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

    Пример синтаксиса кортежа

    my_tuple = (1, 2, 3)
    print(my_tuple)

    Вывод: (1, 2, 3).

    Кортежи против списков: в чем разница

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

    • Обычно кортежи обозначают круглыми скобками (), а списки — квадратными []

    Например:

    my_list = [10, 20, 30]
    my_tuple = (10, 20, 30)

    Но также кортеж можно создать и без скобок:

    my_tuple = 1, 2, 3

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

    • Кортежи занимают меньше памяти, поэтому работают быстрее, чем списки.
    • Если список можно редактировать (добавлять или удалять элементы), то кортеж — это «зафиксированная» последовательность.

    Например, если нужно сохранить координаты точки (3, 4) или дни недели («понедельник», «вторник»), кортеж подойдет идеально, потому что эти данные не должны меняться.

    Например:

    my_tuple = ("понедельник", "вторник", "среда")

    Попытаемся внести изменения в кортеж (например, в первую его ячейку 0, где хранится “понедельник”):

    my_tuple[0] = "пятница"

    В выводе получим стандартную ошибку TypeError, так как мы применили операцию к объекту несоответствующего типа: 

    typeerror:%20'tuple'%20object%20does%20not%20support%20item%20assignment

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

    Как создать кортеж в Python

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

    Типы данных, которые поддерживает кортеж

    Кортеж может содержать значения любых типов данных. 

    Тип данных
    Пример
    int (целое число)
    10
    float (десятичное число)
    2.15
    str (строка)
    «текст»
    NoneType
    None
    bool (логический тип)
    True
    list (список)
    [1, 2, 3]
    dict (словарь)
    {«a»: 1}
    tuple (вложенный кортеж)
    (1, 2)
    set (множество)
    {1, 2, 3}

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

    Основные операции с кортежами

    Кортежи поддерживают операции, которые не влияют на их содержимое.

    Получить элемент

    Чтобы получить элемент, используют индексы, начиная с 0. Команда my_tuple[1] вернет второй элемент. 

    Отрицательные индексы работают с конца. То есть -1 — это последний элемент, -2 — предпоследний и так далее.

    Например:

    my_tuple = ("январь", "февраль", "март", "апрель")

    my_tuple[0] вернет «январь», my_tuple[-1] вернет «апрель», а my_tuple[-2] — «март».

    Посчитать длину

    Функция len() возвращает количество элементов в кортеже.

    Например:

    my_tuple = (10, "привет", 2.15)
    print(len(my_tuple))

    Вывод: 3.

    Объединить кортежи

    Оператор + создает новый кортеж, соединяя два существующих.

    Например:

    my_tuple = (24, 43, 76)
    new_tuple = my_tuple + (4, 5)
    print(new_tuple)

    Вывод: (24, 43, 76, 4, 5)

    Повторить кортеж

    Оператор * повторяет кортеж указанное количество раз.

    Например:

    my_tuple = (24, 43, 76)
    repeated_tuple = my_tuple * 2
    print(repeated_tuple)

    Вывод: (24, 43, 76, 24, 43, 76)

    Методы кортежей в Python

    Кортежи имеют только два встроенных метода: count() и index(). Это связано с их неизменяемостью — кортежи не поддерживают методы для добавления, удаления или изменения элементов, в отличие от списков.

    Метод count() 

    Метод count() возвращает количество раз, когда указанный элемент встречается в кортеже.

    Например:

    my_tuple = (1, 2, 3, 2, 4, 2)
    print(my_tuple.count(2))

    Вывод: 3 (так как элемент 2 встречается 3 раза)

    Если элемента нет, то в выводе получим 0.

    Метод index()

    Метод index() возвращает индекс первого вхождения указанного элемента. То есть первый раз, когда элемент встречается в последовательности. 

    print(my_tuple.index(3))

    Вывод: 2 (элемент 3 находится на индексе 2)

    Если элемента нет, возникает ошибка:

    valueerror: tuple.index(x):not in tuple

    Но ее можно избежать, обработав с помощью условия и оператора in. Например:

    if 3 in my_tuple:
        print(my_tuple.index(5))
    else:
        print("Элемент 3 не найден")

    Можно ли сортировать кортежи

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

    Как преобразовать кортеж в список и обратно

    Для преобразования кортежа в список используют функцию list(), а для сортировки списка — функцию sorted(), которая возвращает новый отсортированный список. Затем можно преобразовать список обратно в кортеж с помощью tuple(). Ход действий такой:

    1. Создаем кортеж my_tuple:
    my_tuple = (4, 1, 3, 2)
    1. Преобразуем кортеж в список с помощью list().
    my_list = list(my_tuple)
    1. Сортируем получившийся список (по умолчанию от меньшего к большему) и получаем новый отсортированный список. Для этого используют функцию:
    sorted_list = sorted(my_list)

    Проверяем, что список отсортирован:

    print(sorted_list)

    Вывод: [1, 2, 3, 4].

    Либо для сортировки на месте можно использовать list.sort():

    my_list.sort()
    print(my_list)

    Вывод: [1, 2, 3, 4].

    1. Если нужно, можно преобразовать список обратно в кортеж:
    new_tuple = tuple(sorted_list)

    И вывести результат:

    print(new_tuple)

    Вывод: (1, 2, 3, 4)

    Распаковка кортежей

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

    Например, если кортеж содержит имя и возраст, вы можете присвоить их переменным name и age в одной строке.

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

    Как распаковать кортеж

    1. Создаем кортеж:
    my_tuple = ("Иван", 25)
    1. Распаковываем его, перечисляя переменные через запятую:
    name, age = my_tuple
    print(name)

    Вывод: Иван.

    print(age)

    Вывод: 25.

    Распаковать кортеж можно также из возвращаемого функцией значения.

    def get_person():
        return ("Петр", 30)
    person_name, person_age = get_person()
    print(person_name, person_age)

    Вывод: Петр 30.

    Если не совпадет количество переменных

    При несовпадении количества переменных получим ошибку ValueError.

    При вводе a = my_tuple получим ошибку:

    valueerror: not enough values to unpack (expected 2,got 1)

    А при person_name, person_last_name, person_age = get_person() 

    valueerror: too many values to unpack(expected 2)

    Полезные фишки и практические примеры работы с кортежами

    Использование кортежей в качестве ключей словаря

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

    Например:

    Сделаем словарь с кортежами в виде координат, где (0, 0) — координата начала, а (1, 2) — пункт назначения.

    locations = {(0, 0): "Начало", (1, 2): "Пункт назначения"}

    При запросе по координатам получим связанное значение:

    print(locations[(1, 2)])

    Вывод: Пункт назначения.

    Распаковка с оператором *

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

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

    Создадим кортеж:

    my_tuple = (1, 2, 3, 4)

    Присвоим часть элементов кортежа переменной, а часть — списку:

    first, *rest = my_tuple

    И выведем результаты:

    print(first) 

    Вывод: 1

    print(rest) 

    Вывод: [2, 3, 4]

    Вложенные кортежи

    Кортежи могут содержать внутри другие кортежи. Так можно представлять, например, список точек.

    Создадим вложенный кортеж для хранения точек:

    points = ((1, 2), (3, 4), (5, 6))

    И выведем элементы:

    print(points[1])

    Вывод: (3, 4)

    print(points[1][0])

    Вывод: 3

    Проверка наличия элемента с помощью in

    Оператор in позволяет проверить, есть ли элемент в кортеже.

    Создаем кортеж:

    my_tuple = ("яблоко", "банан", "груша")

    «Спрашиваем», есть ли элемент «банан» в кортеже my_tuple:

    print("банан" in my_tuple)

    Вывод: True

    Срезы для извлечения данных

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

    Создадим кортеж, откуда нужно взять срез:

    my_tuple = (0, 1, 2, 3, 4)

    Возьмем и выведем срез от первого до четвертого элемента (не включительно):

    print(my_tuple[1:4])

    Вывод: (1, 2, 3).

    Почему 4 элемент не входит?

    Так устроен срез в Python: a[start:stop] — берет от start включительно до stop не включительно.

    Хранение констант

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

    SETTINGS = ("localhost", 8080, "debug")
    host, port, mode = SETTINGS
    print(f"Сервер: {host}, порт: {port}, режим: {mode}")

    Вывод: Сервер: localhost, порт: 8080, режим: debug

    Возврат нескольких значений из функции

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

    def get_stats(numbers):
        return (min(numbers), max(numbers), sum(numbers) / len(numbers))
    
    stats = get_stats([1, 2, 3, 4, 5])
    min_val, max_val, avg = stats
    print(f"Мин: {min_val}, Макс: {max_val}, Среднее: {avg}")

    Вывод: Мин: 1, Макс: 5, Среднее: 3.0.

    Передача аргументов в функции

    Кортеж можно распаковать в аргументы функции с помощью *.

    def print_coords(x, y):
        print(f"X: {x}, Y: {y}")
    coords = (10, 20)
    print_coords(*coords)

    Вывод: X: 10, Y: 20

    Коротко о кортежах в Python

    • Кортеж (tuple) — неизменяемый тип данных в Python для хранения нескольких элементов.
    • Его используют для хранения и получения неизменяемых данных (координаты, дни недели), экономии памяти, возврата нескольких значений из функций.
    • Создают кортежи с помощью круглых скобок () (когда элементов несколько, можно без скобок — 1, 2). Пустой кортеж — (), с одним элементом — (5,)
    • Функция tuple() преобразует другие типы в кортеж.
    • Кортежи неизменяемы и быстрее, чем списки, так как занимают меньше памяти.
    • У кортежей есть два метода: count() (подсчет элементов) и index() (поиск индекса).
    • Кортежи не сортируются напрямую. Их сначала преобразуют в список (list()), сортируют (sorted() или list.sort()), затем преобразуют обратно в кортеж (tuple()).
    • Элементы кортежа можно присваивать переменным (например, name, age = («Иван», 25)).
    • Кортежи можно использовать как ключи словарей, делать вложенные кортежи, распаковывать с *, вытаскивать срезы, проверять наличие элементов с помощью in.

    Инструкция

    Поделиться

    Скопировано
    0 комментариев
    Комментарии