2026, Jan 06 06:01

Как перебирать пары кортежей в Python: распаковка в цикле for

Разбираем, как перебирать пары кортежей в Python без вспомогательных операторов: распаковка в цикле for, типичные ошибки (пропущенная запятая) и пример.

При переборе итерируемого объекта из 2‑элементных кортежей в Python 3 логично захотеть получить две переменные цикла без дополнительной вложенности. Часто пытаются найти вспомогательную функцию или оператор, по аналогии с enumerate, который добавляет к значению индекс. Фокус в том, что никакой специальный оператор здесь не нужен.

Постановка задачи

Рассмотрим итерируемую последовательность пар и цикл, который пытается применить некую гипотетическую «прослойку» перед перебором. Распространённое заблуждение выглядит так, и его усугубляет пропущенная запятая между кортежами:

for a_val, b_val in mystery_op(((1, 2) (3, 4))):
print(a_val * b_val)

Замысел понятен: итерироваться по парам и умножать их элементы, получив 2 и 12.

Что происходит на самом деле

В такой задаче стандартная распаковка Python уже делает ровно то, что нужно. Цикл for распаковывает каждый двухэлементный кортеж в две переменные — без каких‑либо дополнительных функций или операторов. Если входные данные корректно записаны как последовательность кортежей, разделённых запятыми, цикл напрямую привязывает обе переменные.

Смущение часто возникает из‑за ожидания «дополнительного» оператора и — порой — из‑за случайно пропущенной запятой между кортежами. Из‑за этого структура становится некорректной и прячет простое решение.

Решение

Просто перебирайте пары и позвольте циклу их распаковать. Никаких вспомогательных средств не требуется.

for left_num, right_num in ((1, 2), (3, 4)):
print(left_num * right_num)

Вывод:

2
12

Почему это важно

Опора на стандартную распаковку делает код компактным и идиоматичным. Она исключает лишние «прослойки» и читается ровно так, как задумано: на каждой итерации приходит пара, а её части получают понятные, отдельные имена. Если кажется, что нужен ещё один оператор, сначала проверьте, не решает ли Python это из коробки.

Итог

Если у вас есть итерируемый объект из 2‑элементных кортежей, пишите цикл for, который распаковывает их напрямую. Убедитесь, что пары разделены запятыми, и не добавляйте вспомогательные обёртки там, где это не требуется. Здесь чаще всего верна простейшая форма: for x, y in iterable_of_pairs.