Распаковка кортежа в Python с примерами
В этом уроке вы узнаете, как распаковывать кортежи в Python. Python определяет кортеж с помощью запятых(,), а не круглых скобок().
Следующий пример определяет так кортеж с двумя элементами:
1,2
Python использует круглые скобки, чтобы сделать кортеж более понятным:
(1, 2)
Python также использует круглые скобки для создания пустого кортежа:
()
Кроме того, вы можете использовать конструктор tuple() следующим образом:
tuple()
Чтобы определить кортеж только с одним элементом, вам все равно придется использовать запятую. Следующий пример иллюстрирует, как определить кортеж с одним элементом:
1,
Это также кортеж с одним элементом:
(1, )
Обратите внимание, что следующий пример — это целое число, а не кортеж:
(1)
- Распаковка кортежа
- Использование распаковки кортежа для замены значений двух переменных
- ValueError: слишком много значений для распаковки
- Расширенная распаковка с помощью оператора *
- Использование оператора * в правой части
- Заключение
Распаковка кортежа
Распаковка кортежа означает разделение его элементов на отдельные переменные. Например:
x, y =(1, 2)
Левая сторона:
x, y
представляет собой кортеж двух переменных x и y.
Правая часть также представляет собой кортеж из двух целых чисел 1 и 2.
Выражение присваивает элементы кортежа в правой части (1, 2) каждой переменной в левой части(x, y) на основе относительного положения каждого элемента. В приведенном выше примере x примет 1, а y примет 2.
Смотрите другой пример:
x, y ,z = 10, 20, 30
Правая часть представляет собой кортеж из трех целых чисел 10, 20 и 30. Вы можете быстро проверить его тип следующим образом:
numbers = 10, 20, 30 print(type(numbers))
Выход:
<class 'tuple'>
В приведенном выше примере переменные x, y и z примут значения 10, 20 и 30 соответственно.
Использование распаковки кортежа для замены значений двух переменных
Традиционно, чтобы поменять местами значения двух переменных, вы должны использовать такую временную переменную:
x = 10 y = 20 print(f'x={x}, y={y}') tmp = x x = y y = tmp print(f'x={x}, y={y}')
Выход:
x=10, y=20 x=20, y=10
В Python вы можете использовать синтаксис распаковки кортежа для достижения того же результата:
x = 10 y = 20 print(f'x={x}, y={y}') x, y = y, x print(f'x={x}, y={y}')
Выход:
x=10, y=20 x=20, y=10
Следующее выражение меняет местами значения двух переменных: x и y.
x, y = y, x
В этом выражении Python сначала оценивает правую часть, а затем присваивает переменной из левой части значения из правой части.
ValueError: слишком много значений для распаковки
В следующем примере элементы кортежа распаковываются в переменные. Однако это приведет к ошибке:
x, y = 10, 20, 30
Ошибка:
ValueError: too many values to unpack(expected 2)
Эта ошибка связана с тем, что правая часть возвращает три значения, а левая часть содержит только две переменные.
Чтобы это исправить, вы можете добавить переменную _:
x, y, _ = 10, 20, 30
Переменная _ — это обычная переменная в Python. По соглашению ее называют фиктивной переменной. Обычно вы используете фиктивную переменную для распаковки, когда вам это не нужно, а затем используете ее значение.
Расширенная распаковка с помощью оператора *
Иногда вам не нужно распаковывать каждый элемент кортежа. Например, вы можете распаковать первый и второй элементы. В этом случае вы можете использовать оператор *. Например:
r, g, *other =(192, 210, 100, 0.5)
Выход:
192 210 [100, 0.5]
В этом примере Python присваивает 192 значению r, 210 — g. Кроме того, Python упаковывает оставшиеся элементы 100 и 0,5 в список и присваивает его другой переменной.
Обратите внимание, что вы можете использовать оператор * только один раз в левой части назначения распаковки.
Следующий пример приводит к ошибке:
x, y, *z, *t =(10, 20, 30, '10:30')
Ошибка:
SyntaxError: two starred expressions in assignment
Использование оператора * в правой части
Python позволяет использовать оператор * справа. Предположим, что у вас есть два кортежа:
odd_numbers =(1, 3, 5) even_numbers =(2, 4, 6)
В следующем примере оператор * используется для распаковки этих кортежей и объединения их в один кортеж:
numbers =(*odd_numbers, *even_numbers) print(numbers)
Выход:
(1, 3, 5, 2, 4, 6)
Заключение
- Python использует запятые(,) для определения кортежа, а не круглые скобки.
- Распаковка кортежей означает присвоение отдельных элементов кортежа нескольким переменным.
- Используйте оператор *, чтобы поместить оставшиеся элементы распаковочного присваивания в список и присвоить его переменной.