Вложенные циклы в Python: таблицы и перебор пар
Автор: Казачкин Даниил Михайлович · Обновлено
Во вложенных циклах внутренний цикл полностью выполняется для каждого значения внешней переменной. Если внешний делает r итераций, а внутренний c, тело выполняется r × c раз. Переменные циклов должны иметь разные имена и отражать роль — например row и column.
Координаты прямоугольной таблицы
rows = 2
columns = 3
for row in range(rows):
for column in range(columns):
print(row, column)Ожидаемый порядок:
0 0
0 1
0 2
1 0
1 1
1 2Сначала row равен 0, а column проходит 0, 1, 2. Затем внешний цикл меняет row на 1 и внутренний диапазон начинается заново.
Отступ и количество операций
Если print сдвинуть на уровень внешнего цикла, он выполнится только два раза после завершения внутренних проходов. Если случайно использовать range(rows) и для столбцов, квадратный результат скроет ошибку на тесте 2 × 2; прямоугольный тест 2 × 3 обнаружит её.
Полный перебор пар быстро растёт. Для 1000 × 1000 тело выполнится миллион раз, поэтому перед добавлением третьего цикла оцените масштаб. Не всякая задача требует проверить каждую пару: иногда данные можно хранить в множестве или словаре.
Таблица умножения фрагментом
Выведите таблицу произведений для строк от 1 до 3 и столбцов от 1 до 4 в виде «2 * 3 = 6». Проверьте, что получилось 12 строк, первая содержит 1 и 1, последняя — 3 и 4. Затем добавьте условие и выведите только пары с чётным произведением. До запуска посчитайте количество подходящих пар вручную.
Число проходов по сетке
Для прямоугольников 2 × 5, 5 × 2 и 0 × 4 посчитайте итерации вложенных циклов с отдельным счётчиком. Сравните фактическое число с произведением размеров. Затем добавьте continue для пропуска диагональных пар row == column и вычислите количество напечатанных координат. Не добавляйте break, пока не сможете описать, какой именно цикл он завершит: команда влияет только на ближайший. В отчёте разделите оценку полного числа итераций и числа полезных действий после фильтра — эти величины не всегда совпадают.
Практикум: координаты без зеркальных дублей
Выведите клетки прямоугольника 3 × 4 как пары (row, column) и подтвердите число итераций. Затем для списка имён получите все пары разных участников только один раз, задав внутренний диапазон от i + 1. Проверьте три имени вручную. Сравните с двумя полными диапазонами, где появляются пары с самим собой и зеркальные дубли. Для размера 1000 оцените число пар до запуска и решите, допустим ли такой перебор.
Контрольная точка
Как меняется внутренняя граница на каждой итерации и почему условие i < j гарантирует уникальность пары позиций? Отличайте позиции от равных значений.
Частые вопросы
Как посчитать общее число выполнений внутреннего тела?
Для прямоугольных диапазонов перемножьте их длины. Для пар с i < j получается сумма n - 1 + n - 2 + … + 1, то есть n(n - 1)/2.