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

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

  • автор:

Кортежи (tuple)

Python 3 логотип

Сегодня я расскажу о таком типе данных, как кортежи (tuple) и о том, где они применяются.

Кортеж, по сути — неизменяемый список.

Зачем нужны кортежи, если есть списки?

  • Защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).
  • Меньший размер. Дабы не быть голословным:

Как работать с кортежами?

С преимуществами кортежей разобрались, теперь встает вопрос — а как с ними работать. Примерно так же, как и со списками.

Создаем пустой кортеж:

    Создаем кортеж из одного элемента:
 
 
 

Ну и создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()

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

Все операции над списками, не изменяющие список (сложение, умножение на число, методы index() и count() и некоторые другие операции). Можно также по-разному менять элементы местами и так далее.

Например, гордость программистов на python - поменять местами значения двух переменных:

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

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

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

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

Альтернатива неинформативным и жестко закодированным индексам

Допустим, мы имеем кортеж first_tuple , состоящий из 3-х элементов:

>>> first_tuple = (2, 1, 3) 

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

>>> print(first_tuple[0], first_tuple[1], first_tuple[2]) 2 1 3 

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

>>> x, y, z = first_tuple 

Операция присваивания из вышеприведенного примера, как раз и называется распаковкой кортежа. Такое название прямо отражает сущность данной операции, в которой кортеж, состоящий из трех элементов просто, был распакован в три переменные ( x , y , и z ):

>>> print(x, y, z) 2 1 3 

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

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

>>> x, y = first_tuple Traceback (most recent call last): File "", line 1, in ValueError: too many values to unpack (expected 2) 

При распаковке какого-либо картежа всегда необходимо, чтобы его структура и перемененных, в которые он распаковывается, совпадали. Проще говоря, количество переменных, в которые распаковывается ваш картеж должно соответствовать количеству элементов самого этого картежа.

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

Распаковка кортежей без применения знака равенства

На практике распаковка кортежей чаще всего используется не в операторах присваивания с применением знака равенства, а в for циклах.

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

>>> furniture = "tables": 2, "chairs": 3, "stands": 0> >>> furniture.items() dict_items([('tables', 2), ('chairs', 3), ('stands', 0)]) 

Каждый полученный нами таким образом двухэлементный кортеж на самом деле представляет собой пару ключ-значение для каждого элемента в нашем словаре. Давайте попробуем отобразить кортежи для каждого элемента этого словаря с помощью цикла for:

>>> for item in furniture.items(): . print(item) . ('tables', 2) ('chairs', 3) ('stands', 0) 

Из предыдущего раздела данной статьи мы уже знаем, что можем распаковать каждый элемент кортежа в соответствующую поименованную переменную. Давайте попробуем это сделать и с кортежами для элементов нашего словаря. Каждый из таких картежей, содержащий пару ключ-значение для соответствующего элемента словаря мы распакуем в переменную furniture и переменную amount соответственно:

>>> for item in furniture.items(): . furniture, amount = item . print(furniture, amount) . tables 2 chairs 3 stands 0 

Фактически же распаковка наших кортежей в отдельной строке внутри тела цикла с использованием оператора присваивания ( = ) было излишеством. Ведь на самом деле при каждой итерации цикла for в самой строке с определением этого цикла происходит так называемое неявное присваивание, когда в переменную, находящуюся между for и in, присваивается результат выражения, находящегося справа от in.

Таким образом, вышеприведенный пример мы можем переписать в несколько более компактной форме, производя распаковку наших кортежей прямо в строке с определением for цикла:

>>> for furniture, amount in furniture.items(): . print(furniture, amount) . tables 2 chairs 3 stands 0 

Следовательно, в строке с определением for цикла нам вообще не была нужна промежуточная переменная item поскольку все, что можно поместить слева от знака равенства в операторе присваивания, с таким же успехом мы можем разместить между for и in в цикле for. Вообще же, первая (определяющая) строка цикла for явится в вашей практике тем наиболее распространенным местом, куда вам потребуется распаковывать, как разнообразные кортежи, так и другие итерируемые объекты.

Выводы

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

Чаще всего вы будете сталкиваться именно с распаковками итерируемых двухэлементных или же трехэлементных кортежей при их переборе в for циклах. Хотя, на самом деле Python позволяет распаковывать кортежи и любые другие итерируемые объекты в любом месте кода, где вам может потребоваться дать описательные имена к элементам внутри данных объектов.

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

Получаю вот такой вот кортеж из бд: [(1, 'Петрова Анастасия Ивановна', '+78005553535', '123456237562\n')] Вопрос, как я могу определить номер элемента в кортеже под которым прячется номер? Пробовал через цикл for, но ничего не вышло

for i in numbers: if "+" in numbers[0][i]: tmp = numbers[0][i] 

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

Отслеживать
задан 29 июн 2022 в 15:32
Антон Александрович Антон Александрович
99 5 5 бронзовых знаков
А напечатать, что у вас в i получается и посмотреть? ) Там кортеж как-раз.
29 июн 2022 в 15:34
Да, я получил кортеж но как из него вырезать элемент '+78005553535', и узнать его номер?
29 июн 2022 в 15:36

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Можно так всё перебрать - сначала кортежи в списке, а потом элементы кортежа:

numbers = [(1, 'Петрова Анастасия Ивановна', '+78005553535', '123456237562\n')] for record in numbers: for item in record: if '+' in str(item): print(item) 
+78005553535 

Если нужны "координаты" элемента - можете использовать enumerate :

for n_rec, record in enumerate(numbers): for n_item, item in enumerate(record): if '+' in str(item): print(n_rec, n_item, item) 
0 2 +78005553535 

Т.е. это кортеж с индексом 0 в списке и в самом кортеже это элемент с индексом 2 .

Как разобрать кортеж Python: простое руководство с примерами и объяснениями ��

Чтобы разобрать кортеж в Python, вы можете использовать индексацию, распаковку и методы кортежа. Индексация: Для доступа к элементам кортежа, вы можете использовать индексацию, начиная с 0. Например, если у вас есть кортеж t = (1, 2, 3) , чтобы получить доступ к первому элементу, вы можете использовать t[0] .

t = (1, 2, 3) print(t[0]) # Вывод: 1

Распаковка: Вы можете распаковать кортеж, чтобы получить доступ к его элементам по отдельности. Например, если у вас есть кортеж t = (1, 2, 3) , вы можете распаковать его в переменные a , b и c следующим образом:

t = (1, 2, 3) a, b, c = t print(a) # Вывод: 1 print(b) # Вывод: 2 print(c) # Вывод: 3

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

t = (1, 2, 2, 3) print(t.index(2)) # Вывод: 1, так как индекс первого вхождения 2 - 1 print(t.count(2)) # Вывод: 2, так как 2 встречается дважды

Детальный ответ

Как разобрать кортеж в Python?

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

1. Присваивание по отдельной переменной

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

my_tuple = (1, 2, 3) x, y, z = my_tuple print(f"Значение x: ") print(f"Значение y: ") print(f"Значение z: ")

В данном случае, мы присваиваем значения из кортежа `my_tuple` переменным `x`, `y` и `z` соответственно. Результат выполнения данного кода:

Значение x: 1 Значение y: 2 Значение z: 3

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

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

Второй способ - это использование распаковки кортежа. Это более гибкий способ, позволяющий работать с любыми размерами кортежей.

my_tuple = (1, 2, 3, 4, 5) first, *middle, last = my_tuple print(f"Первый элемент: ") print(f"Средние элементы: ") print(f"Последний элемент: ")

В данном случае, мы используем звездочку (*) перед переменной `middle`, чтобы указать, что она должна содержать все остальные элементы кортежа, не учитывая первый и последний элементы. Результат выполнения данного кода:

Первый элемент: 1 Средние элементы: [2, 3, 4] Последний элемент: 5

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

Заключение

В данной статье мы рассмотрели два способа разбора кортежа в Python: присваивание по отдельной переменной и распаковку кортежа. Оба способа позволяют получать отдельные значения из кортежа и использовать их в дальнейшей работе. Выбор метода зависит от задачи и вашего личного предпочтения. Учтите, что кортежи являются неизменяемыми объектами, поэтому после разбора кортежа значения не могут быть изменены. Если вам нужно изменить значения, лучше использовать список (list). Надеюсь, данный материал был полезен для вас!

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

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