JavaRush /Курсы /Модуль 1: Python Core /Продвинутая работа с кортежами

Продвинутая работа с кортежами

Модуль 1: Python Core
5 уровень , 14 лекция
Открыта

15.1 Создание копии кортежа

Итак, мы уже знаем., что кортежи (tuples) — это неизменяемые последовательности элементов. Из-за их неизменности создание копии кортежа может показаться незначительной задачей, ведь в отличие от списков, кортежи не изменяются после создания.

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

Прямое присваивание

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


original_tuple = (1, 2, 3, 4, 5)
copied_tuple = original_tuple
print(copied_tuple)
        

В этом случае copied_tuple будет ссылаться на тот же объект, что и original_tuple.

Использование функции tuple()

Другой способ создания копии кортежа — это использование встроенной функции tuple(). Эта функция создает новый кортеж, копируя элементы исходного кортежа.


original_tuple = (1, 2, 3, 4, 5)
copied_tuple = tuple(original_tuple)
print(copied_tuple)

        

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

Преобразование через список

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


original_tuple = (1, 2, 3, 4, 5)

temp_list = list(original_tuple)
temp_list.append(6)
copied_tuple = tuple(temp_list)
            
print(copied_tuple)

        

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

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

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

Основные способы объединения кортежей

Конкатенация

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


tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
combined_tuple = tuple1 + tuple2
            
print(combined_tuple)
        

В этом примере combined_tuple будет содержать элементы (1, 2, 3, 4, 5, 6).

Умножение на целое число

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


tuple1 = (1, 2, 3)
multiplied_tuple = tuple1 * 3
            
print(multiplied_tuple)
        

Здесь multiplied_tuple будет содержать элементы (1, 2, 3, 1, 2, 3, 1, 2, 3).

Функция itertools.chain

Для объединения большого числа кортежей можно использовать функцию chain из модуля itertools. Это удобно, когда количество кортежей для объединения неизвестно заранее.


from itertools import chain

tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
tuple3 = (7, 8, 9)
            
combined_tuple = tuple(chain(tuple1, tuple2, tuple3))
print(combined_tuple)
        

Результат будет (1, 2, 3, 4, 5, 6, 7, 8, 9).

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

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

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


nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))
        

В этом примере nested_tuple содержит три кортежа, каждый из которых состоит из трех элементов.

Пример создания вложенного кортежа из обычных:

В этом примере nested_tuple содержит три кортежа, каждый из которых состоит из трех элементов.


tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
nested_tuple = (tuple1, tuple2)
            
print(nested_tuple)
        

Здесь nested_tuple будет содержать ((1, 2, 3), (4, 5, 6)).

Доступ к элементам вложенного кортежа

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


nested_tuple = ((1, 2, 3), (4, 5, 6), (7, 8, 9))

# Доступ к элементу 5 во втором вложенном кортеже
element = nested_tuple[1][1]
print(element)  # Вывод: 5
        

Многомерные массивы

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

Структурирование данных

Вложенные кортежи удобны для структурирования данных, таких как географические координаты (широта и долгота) для нескольких мест:


locations = (("New York", (40.7128, -74.0060)), 
             ("Los Angeles", (34.0522, -118.2437)), 
             ("Chicago", (41.8781, -87.6298)))
        
1
Опрос
Кортежи в Python, 5 уровень, 14 лекция
Недоступен
Кортежи в Python
Кортежи в Python
Комментарии (17)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Vasyl Tverdokhlib Уровень 22
3 августа 2025
Как добавить элемент в кортеж? а где вариант "никак"?
shinobi Уровень 19
24 июля 2025
Опрос: Кортежи нельзя изменять ни при каких условиях. Мой ответ - да. НЕВЕРНО. Почему?
shinobi Уровень 19
24 июля 2025
Если Кортеж это НЕИЗМЕНЯЕМЫЙ объект, то почему в ОПРОСЕ его вдруг можно изменить?
shinobi Уровень 19
24 июля 2025
Ответьте, автор, а зачем вообще нужна копия кортежа? "... кортежи (tuples) — это неизменяемые последовательности элементов..." "Однако в некоторых случаях может потребоваться создать копию кортежа, особенно когда важно работать с его отдельной версией, не изменяя исходные данные. " Кортеж и так и так не изменяется, копия - будет даже ссылаться на тот-же кортеж, при "работе" с ним он тоже не будет изменяться, ну и нахрен нужна копия? Нахрен нужна вообще вся эта страница? Как по мне, портит впечатление от всего уровня, и так кортежи проходняк, ну похер, ради практики поделали задачки, но целая страница копипасты ради галочки, где тебе предлагают копировать кортеж просто присваиванием новой переменной и даже не объясняют зачем (смысла нет) зато не единого слово про УДАЛЕНИЕ кортежей, что реально могло быть полезным чтобы освобождать память, если соединяешь кортежи, то подчищаешь память и удаляешь за собой старые и ненужные.
P L Уровень 8
22 октября 2025
Люто плюсую. Да в принципе весь уровень - полнейшая халтура.
Slevin Уровень 64
24 июня 2025
Ну викторина - как обычно. Отвечай на вопрос, пытаясь угадать, как рассуждал автор викторины, когда ее создавал
Bigcrash Уровень 9
29 мая 2025
Доступ к элементам вложенного кортежа Эту тему нужно было в предыдущую лекцию вставить. Там как раз для инициализации МАХ числа этих знаний не хватает. Еще у меня как у full_zero питон-юзера жуткое непонимание, накой нужны кортежи, если есть удобные изменяемые списки?
Юлия Уровень 7
8 марта 2025
В подпункте "пример создания вложенного кортежа из обычных" - дублируется фраза, которая была использована в другом примере выше. Данная фраза - не является корректной для примера, который она описывает. Речь про фразу - "в этом примере nested_tuple содержит три кортежа, каждый из которых состоит из трех элементов." В примере же написано 2 кортежа, а не 3.
Юлия Уровень 7
8 марта 2025
Так ведь в случаях создания "копии" кортежа 1. с прямым присваиванием и 2. с функцией tuple() - нового кортежа не создается как написано в лекции. Если сделать проверку - то станет видно, что у каждого из кортежей (оригинального и "копии") - одинаковые id-шники, т.е. объект кортежа остается один и тот же. В данных случаях - создается новая ссылка на тот же самый объект. Нового объекта-кортежа не создается, как, например, в случае, когда мы хотим сделать новый объект "список" с тем же самым содержимым и копируем список через метод .copy()
Ild Gih Уровень 31
9 февраля 2025
в лекции 10.2 Создание кортежа написано: Кортеж из одного элемента: Для создания кортежа с одним элементом необходимо поставить запятую после этого элемента. tuple1 = (1,) tuple2 = ("apple",) tuple3 = (True,) а в 3 вопросе "Как создать кортеж из одного элемента?" второй ответ "(element,)" считается неправильным, что тогда правильно ?!
b1sted Уровень 13
19 февраля 2025
Правильным вариантом считается вариант, озаглавленный, как: "Оба варианта верны", т.е.: 1. tuple1 = (1,) 2. tuple2 = 1, Для интерпретатора Python важно наличие запятой, а не круглых скобок. Именно запятая даёт понятие для интерпретатора, что объявляемую переменную нужно создавать с типом tuple.
Маруся Уровень 23
18 января 2025
Не хватает обратной связи в тех случаях, когда даешь неправильный ответ. Как понять, какой ответ в итоге был правильным? (особенно в тех случаях, когда ты уверен, что дал правильный ответ)
Никита Уровень 30
10 апреля 2025
Перезагрузи страницу и пройди еще раз. Я так делаю, пока не пройду все верно
shinobi Уровень 19
24 июля 2025
Жмёте "ответ", и там ответ предложенный автором, но чаще всего сделанный вообще другим способом который не относится ни к лекции, ни к уровням, чаще проще нейронку спрашивать
25 октября 2024
У меня есть вопросы к проверке материала : 1 Как можно создать кортеж? Выберите один из вариантов: -с помощью фигурных скобок -с помощью круглых скобок -с помощью квадратных скобок -без использования скобок Я выбирая ответ круглые скобки - он не верный! Также в лекции: "Полезно. Можно думать о кортеже как о неизменяемом списке, который вместо квадратных скобок [] использует круглые (). Как будет выглядеть пустой кортеж ? или с 1 элементом? ______________________________________________ 2 Что верно относительно изменения кортежей? Выберите один из вариантов: -Кортежи можно изменять напрямую -Кортежи неизменяемы, но можно создать их измененные копии -Кортежи полностью изменяемы -Кортежи нельзя изменять ни при каких условиях Я выбрал 4 вариант: -Кортежи нельзя изменять ни при каких условиях — он не верный. В лекции : "Менять кортеж нельзя — однажды созданный, он остается неизменным, что делает его идеальным для хранения данных, которые не должны изменяться в программе. Поэтому его вторая характеристика — неизменяемость (immutable)." Я понимаю , что мы можем перевести в list и изменить его , но это уже не кортеж. ?????????????????
Andrey Bobrovski Уровень 1
4 февраля 2025
В это лекции вообще, извините за выражение "насрано": "... кортежи (tuples) — это неизменяемые последовательности элементов..." "Однако в некоторых случаях может потребоваться создать копию кортежа, особенно когда важно работать с его отдельной версией, не изменяя исходные данные. " ??????? "Проще всего создать копию кортежа, используя прямое присваивание. Это создаст новый объект кортежа, но поскольку кортежи неизменяемы, оба объекта будут ссылаться на одни и те же данные." а зачем мне новая неизменяемая переменная, но абсолютно такая же как старая?????? побольше запутать коллег по цеху при ревью моего кода????? если же мы говорим про изменения через List, то там все равно будут создаваться НОВЫЕ кортежи с, соответственно НОВЫМИ ячейками памяти
Votvlad Уровень 24
15 февраля 2025
да, я тоже задался этим вопросом и нашел ответ: переменная, которой присваивается кортеж, хранит ссылку на объект. Сам кортеж мы изменить не можем, но можем поменять ссылку: например, my_tuple = (1, 2, 3). Элементы внутри кортежа неизменны, но если мы изменим ссылку на (4, 5, 6), то переменная будет ссылаться уже на другой объект.