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

Как распаковать кортеж 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

Распаковка ( unpacking , также называемая Деструктуризация ) представляет разложение коллекции (кортежа, списка и т.д.) на отдельные значения.

Так, как и многие языки программирования, Python поддерживает концепцию множественного присваивания. Например:

x, y = 1, 2 print(x) # 1 print(y) # 2

В данном случае присваивем значения сразу двум переменным. Присвоение идет по позиции: переменная x получает значение 1, а переменная y — значени 2.

Данный пример в действительности уже представляет деструктуризацию или распаковку. Значения 1, 2 фактически являются кортежом, поскольку именно запятые между значениями говорят о том, что это кортеж. И мы также могли бы написать следующим образом:

x, y = (1, 2) print(x) # 1 print(y) # 2

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

Подобным образом можно разложить другие кортежи, например:

name, age, company = ("Tom", 38, "Google") print(name) # Tom print(age) # 38 print(company) # Google

Только кортежами мы не ограничены и можем «распаковывать» и другие коллекции, например, списки:

people = ["Tom", "Bob", "Sam"] first, second, third = people print(first) # Tom print(second) # Bob print(third) # Sam

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

dictionary = r, b, g = dictionary print(r) # red print(b) # blue print(g) # green # получаем значение по ключу print(dictionary[g]) # зеленый

Деструктуризация в циклах

Циклы в Python позволяют разложить коллекции на отдельные составляющие:

people = [ ("Tom", 38, "Google"), ("Bob", 42, "Microsoft"), ("Sam", 29, "JetBrains") ] for name, age, company in people: print(f"Name: , Age: , Company: ")

Здесь мы перебираем список кортежей people. Каждый кортеж состоит из трех элементов, соответственно при переборе мы можем их передать в переменные name, age и company.

Другой пример — функция enumerate() . Она принимает в качестве параметра коллекцию, создает для каждого элемента кортеж и возвращает набор из подобных кортежей. Каждый кортеж содержит индекс, который увеличивается с каждой итерацией:

people = ["Tom", "Bob", "Sam"] for index, name in enumerate(people): print(f".") # результат # 0.Tom # 1.Bob # 2.Sam

Игнорирование значений

Если какой-то элемент коллекции не нужен, то обычно для него определяется переменная с именем _ (прочерк):

person =("Tom", 38, "Google") name, _, company = person print(name) # Tom print(company) # Google

Здесь нам не важен второй элемент кортежа, поэтому для него определяем переменную _. Хотя в реальности _ — такое же действительное имя, как name и company:

name, _, company = person print(_) # 38

Упаковка значений и оператор *

Оператор * упаковывает значение в коллекцию. Например:

num1=1 num2=2 num3=3 *numbers,=num1,num2,num3 print(numbers) #[1, 2, 3]

Здесь мы упаковываем значения из кортежа (num1,num2,num3) в список numbers. Причем, чтобы получить список, после numbers указывается запятая.

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

head, *tail = [1, 2, 3, 4, 5] print(head) # 1 print(tail) # [2, 3, 4, 5]

Здесь переменная head в соответствии с позицией получае первый элемент списка. Все остальные элементы передаются в переменную tail . Таким образом, переменная tail будет представлять список из оставшихся элементов.

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

*head, tail = [1, 2, 3, 4, 5] print(head) # [1, 2, 3, 4] print(tail) # 5

Или элементы по середине, кроме первого и последнего:

head, *middle, tail = [1, 2, 3, 4, 5] print(head) # 1 print(middle) # [2, 3, 4] print(tail) # 5

Или все кроме первого и второго:

first, second, *other = [1, 2, 3, 4, 5] print(first) # 1 print(second) # 2 print(other) # [3, 4, 5]

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

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

first, _, third, *_, last = [1, 2, 3, 4, 5, 6, 7, 8] print(first) # 1 print(third) # 3 print(last) # 8

Также можно получить ключи словаря:

red, *other, green = print(red) # red print(green) # green print(other) # ['blue', 'yellow']

Распаковка и операторы * и **

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

nums1 = [1, 2, 3] nums2 = (4, 5, 6) # распаковываем список nums1 и кортеж nums2 nums3 = [*nums1, *nums2] print(nums3) # [1, 2, 3, 4, 5, 6]

Здесь распаковывем значения из списка nums1 и кортежа nums2 и помещаем их в список nums3.

Подобным образом раскладываются словари, только применяется оператор ** :

dictionary1 = dictionary2 = # распаковываем словари dictionary3 = <**dictionary1, **dictionary2>print(dictionary3) #

Python — распаковка ключей словаря в кортеж

Python — это очень часто используемый язык программирования, используемый программистами по всему миру. Python имеет множество различных приложений, включая веб-разработку, обработку данных, машинное обучение и автоматизацию различных задач. Он предлагает широкий спектр функций, которые можно использовать по мере необходимости. Способность Python распаковывать ключи словаря в кортежи — одна из таких возможностей. Несколько наборов данных хранятся с помощью кортежей в виде одной переменной. Эта статья научит нас, как распаковать ключ словаря в кортеж.

Распаковка

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

unpacking_variable = tuple(dictionary.keys()) # The key method is used to return a view object that contains keys for the dictionary 

Различные методы распаковки ключей словаря в кортеж

Базовый кортеж

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

Пример

Details = < 'Name': 'Sam', 'Age': 12, 'Standard': '5' ># This is the dictionary which to be unpacked unpacking_tuple = tuple(Details.keys()) # With the help of keys() we get the keys of dictionary and convert it into tuple print(unpacking_tuple) # The tuple is displayed 

Выход

Вывод приведенного выше примера будет следующим:

('Name', 'Age', 'Standard') 

Распаковка нескольких переменных

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

Пример

Details = < 'Name': 'Sam', 'Age': 12, 'Standard': 5 ># This is the dictionary to be unpacked Name, Age, Standard = Details.keys() # The dictionary is unpacked into three different variables print(f"Name: , Age: , Standard: ") 

Выход

Вывод приведенного выше примера выглядит следующим образом:

Name: Name, Age: Age, Standard: Standard 

Перебор словаря

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

Пример

Details = < 'Name': 'Sam', 'Age': 12, 'Standard': '5' ># This is the dictionary that is to be unpacked for key in Details.keys(): # For loop is used to iterate over each key in the dictionary print(f"Key: , Value: ") 

Выход

Результат вышеизложенного будет следующим:

Key: Name, Value: Sam Key: Age, Value: 12 Key: Standard, Value: 5 

Сортировка ключей

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

Пример

Details = < 'Name': 'Sam', 'Age': 12, 'Standard': '5' ># This is the dictionary that is to be unpacked unpacked_keys = sorted(Details.keys()) # Sorted function will be used to sort the keys print(unpacked_keys) # The sorted keys will be displayed as output 

Выход

Вывод примера будет следующим:

['Age', 'Name', 'Standard'] 

Извлечение значений

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

Пример

Details = < 'Name': 'Sam', 'Age': 12, 'Standard': '5' ># This is the dictionary that is to be unpacked name, age, standard = [Details[key] for key in ('Name', 'Age', 'Standard')] # We will use the list comprehension to get the values of keys print(f"Name: , Age: , Standard: ") 

Выход

Вывод приведенного выше примера выглядит следующим образом:

Name: Sam, Age: 12, Standard: 5 

Игнорирование нежелательных ключей

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

Пример

Details = < 'Name': 'Sam', 'Age': 12, 'Standard': '5', 'Country' : 'USA' ># This is the dictionary that is to be unpacked name, age, *other_info = Details.keys() print(f"Name: , Age: ") # The required keys are unpacked separately print(f"Other Info: ") # The other keys are unpacked separately 

Выход

Вывод приведенного выше примера выглядит следующим образом:

Name: Name, Age: Age Other Info: ['Standard', 'Country'] 

Заключение

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

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

Все права защищены. © Linux-Console.net • 2019-2024

Распаковка кортежей в 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 позволяет распаковывать кортежи и любые другие итерируемые объекты в любом месте кода, где вам может потребоваться дать описательные имена к элементам внутри данных объектов.

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

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