Как распаковать кортеж python
Перейти к содержимому

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

  • автор:

Упаковка данных в Python — кортеж tuple

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

Как упаковать данные в кортеж

Для функции get_contacts(email) доступны несколько способов упаковки данных в более сложную структуру: словарь dict() , кортеж tuple() и еще несколько других. Рассмотрим подробнее последний вариант — tuple , или по-русски кортеж.

Предположим, вы вызвали функцию get_contacts(‘dmitry@example.com’) , она нашла такого человека и хочет вернуть его контакты:

full_name = 'Никифоров Дмитрий Анатольевич' city = 'Москва' phone_number = '929-876-54-32' 

Функция создает кортеж — tuple() —, чтобы поместить в него все контакты:

contacts = (full_name, city, phone_number) 

Круглые скобки и запятые указывают Python, что из перечисленных переменных full_name , city и phone_number нужно создать новую структуру данных:

print(type(contacts)) # выведет print(contacts) 

Последний вызов print() выведет на экран такое:

('Никифоров Дмитрий Анатольевич', 'Москва', '929-876-54-32') 

Теперь функция get_contacts сможет вернуть любое количество данных. Все они будут упакованы в один кортеж — tuple .

Что делать, если получили tuple

Разберем как работать с tuple на примере стандартной функции divmod . Она возвращает результат деления с остатком:

divmod(100, 3) # выведет (33, 1) divmod(2, 3) # выведет (0, 2) 

Функция divmod возвращает кортеж из двух чисел — результата целочисленного деления и остаток от деления.

Мы можем сохранить результат в переменную:

div_tuple = divmod(100, 3) print(div_tuple) # выведет (33, 1) 

Добраться до каждого из двух чисел можно по индексу:

div_tuple = divmod(100, 3) print(div_tuple[0]) # выведет 33 print(div_tuple[1]) # выведет 1 

Индексы в коде [0] и [1] сильно осложняют чтение, поэтому полезно давать говорящие названия:

div_tuple = divmod(100, 3) int_division = div_tuple[0] remainder = div_tuple[1] print(int_division) # выведет 33 print(remainder) # выведет 1 

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

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

int_division = div_tuple[0] remainder = div_tuple[1] 

Это встречается настолько часто, что в Python ввели упрощенную короткую запись:

(int_division, remainder) = divmod(100, 3) print(int_division) # выведет 33 print(remainder) # выведет 1 

Запись похожа на создание кортежа — те же скобки и запятые, но работает это в обратную сторону. Называется “распаковкой”.

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

int_division, remainder = divmod(100, 3) print(int_division) # выведет 33 print(remainder) # выведет 1 

Последняя форма записи распаковки наиболее распространена и рекомендуется к использованию.

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

contacts = full_name, city, phone_number 

В коде внутри функций часто встречается еще более короткая запись:

return full_name, city, phone_number 

Вызов return сообщает интерпретатору Python, что функция завершает свою работу и хочет вернуть результат. А все перечисленное справо от return будет упаковано в кортеж — tuple .

Как добавить элемент в кортеж

Добавить в кортеж ничего нельзя. Он неизменяемый, однажды созданный кортеж никак нельзя изменить. Зато можно создать новый:

old_tuple = (1, 2) new_tuple = old_tuple + (3, 4) print(new_tuple) # Выведется (1, 2, 3, 4) 

Если вы хотите добавить только один элемент, то велик соблазн написать так:

old_tuple = (1, 2) new_tuple = old_tuple + 3 
TypeError: can only concatenate tuple (not "int") to tuple 

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

old_tuple = (1, 2) new_tuple = old_tuple + (3,) print(new_tuple) # Выведется (1, 2, 3) 

Что ещё почитать

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

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

Скачай курс
в приложении

Перейти в приложение
Открыть мобильную версию сайта

© 2013 — 2023. Stepik

Наши условия использования и конфиденциальности

Get it on Google Play

Public user contributions licensed under cc-wiki license with attribution required

Python — Unpack Tuples

When we create a tuple, we normally assign values to it. This is called «packing» a tuple:

Example

Packing a tuple:

fruits = («apple», «banana», «cherry»)

But, in Python, we are also allowed to extract the values back into variables. This is called «unpacking»:

Example

Unpacking a tuple:

fruits = («apple», «banana», «cherry»)

(green, yellow, red) = fruits

print(green)
print(yellow)
print(red)

Note: The number of variables must match the number of values in the tuple, if not, you must use an asterisk to collect the remaining values as a list.

Using Asterisk *

If the number of variables is less than the number of values, you can add an * to the variable name and the values will be assigned to the variable as a list:

Example

Assign the rest of the values as a list called «red»:

fruits = («apple», «banana», «cherry», «strawberry», «raspberry»)

(green, yellow, *red) = fruits

print(green)
print(yellow)
print(red)

If the asterisk is added to another variable name than the last, Python will assign values to the variable until the number of values left matches the number of variables left.

Example

Add a list of values the «tropic» variable:

fruits = («apple», «mango», «papaya», «pineapple», «cherry»)

(green, *tropic, red) = fruits

print(green)
print(tropic)
print(red)

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

Когда мы создаем кортеж, мы обычно присваиваем ему значения. Это называется «упаковкой» кортежа:

Пример

fruits = («яблоко», «банан», «вишня»)

Но в Python нам также разрешено извлекать значения обратно в переменные. Это называется «распаковка»:

Пример

fruits = («яблоко», «банан», «вишня»)

(зеленый, желтый, красный) = fruits

print(зеленый)
print(желтый)
print(красный)

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

Использование звездочки *

Если количество переменных меньше количества значений, вы можете добавить * к имени переменной, и значения будут присвоены переменной в виде списка:

Пример

Назначьте остальные значения в виде списка под названием «красный»:

fruits = («яблоко», «банан», «вишня», «клубника», «малина»)

(зеленый, желтый, *красный) = fruits

print(зеленый)
print(желтый)
print(красный)

Если звездочка добавлена ​​к другому имени переменной, чем последнее, Python будет присваивать значения переменной до тех пор, пока количество оставшихся значений не совпадет с количеством оставшихся переменных.

Пример

Добавьте список значений переменной «тропический»:

fruits = («яблоко», «манго», «папайа», «ананас», «вишня»)

(зеленый, *тропический, красный) = fruits

print(зеленый)
print(тропический)
print(красный)

Мы только что запустили
SchoolsW3 видео

ВЫБОР ЦВЕТА

colorpicker

курс сегодня!

Сообщить об ошибке

Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:

Ваше предложение:

Спасибо Вам за то, что помогаете!

Ваше сообщение было отправлено в SchoolsW3.

ТОП Учебники
ТОП Справочники
ТОП Примеры
Получить сертификат

SchoolsW3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *