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

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

Следующий пример определяет так кортеж с двумя элементами:

1,2

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

(1, 2)

Python также использует круглые скобки для создания пустого кортежа:

()

Кроме того, вы можете использовать конструктор tuple() следующим образом:

tuple()

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

1,

Это также кортеж с одним элементом:

(1, )

Обратите внимание, что следующий пример — это целое число, а не кортеж:

(1)
Содержание

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

Распаковка кортежа означает разделение его элементов на отдельные переменные. Например:

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 использует запятые(,) для определения кортежа, а не круглые скобки.
  • Распаковка кортежей означает присвоение отдельных элементов кортежа нескольким переменным.
  • Используйте оператор *, чтобы поместить оставшиеся элементы распаковочного присваивания в список и присвоить его переменной.
Похожие посты
Добавить комментарий

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