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.