Вложенные циклы - это циклы, помещенные внутрь другого цикла. Внутренний цикл выполняется полностью для каждой итерации внешнего цикла. Представьте себе часовой механизм: большая стрелка обходит циферблат один раз (внешний цикл), а маленькая стрелка за это время обходит его двенадцать раз (внутренний цикл). В коде это выглядит следующим образом:
for i in range(3): # Внешний цикл, выполняется 3 раза
for j in range(2): # Внутренний цикл, выполняется 2 раза для каждой итерации внешнего
print(f"Внешний цикл: {i}, Внутренний цикл: {j}")
Как это работает:
- Внешний цикл запускается. Например, в первом примере,
i
становится равным 0.
- Внутренний цикл запускается и выполняется полностью. В данном случае,
j
принимает значения 0 и 1, и для каждого из этих значений выводится строка.
- Когда внутренний цикл завершается, внешний цикл переходит к следующей итерации.
i
становится равным 1.
- Процесс повторяется. Внутренний цикл снова выполняется полностью для
i = 1
, и так далее.
- Все продолжается, пока внешний цикл не завершится.
Важные моменты:
- Количество итераций. Общее количество итераций равно произведению количества итераций внешнего и внутреннего циклов. В примере выше, общее количество итераций равно 3 * 2 = 6.
- Сложность алгоритма. Вложенные циклы часто встречаются в алгоритмах с квадратичной сложностью (O(n^2)), например, при сравнении всех пар элементов в массиве. Поэтому важно понимать, как они влияют на производительность, особенно при работе с большими объемами данных. Рассмотрите возможность оптимизации при необходимости.
- Применение. Вложенные циклы часто используются для работы с двумерными массивами (матрицами), генерации комбинаций, реализации алгоритмов сортировки и поиска, и в различных других сценариях, где требуется выполнить итерацию по нескольким измерениям.
- Можно вкладывать циклы глубже. Возможно вкладывать один цикл внутрь другого, создавая трехмерные, четырехмерные и так далее структуры итераций, но это следует делать с осторожностью, чтобы избежать чрезмерной сложности и снижения производительности.