Программа курса:
Вложенные циклы for в Python
Вложенные циклы for
являются важной концепцией в программировании, позволяя выполнять многократные переборы данных и решать задачи, связанные с многомерными структурами. В этом разделе мы подробно рассмотрим, как работают вложенные циклы, приведем множество примеров и обсудим их применение и оптимизацию.
Основы вложенных циклов for

Вложенные циклы — это конструкция, при которой один цикл (for
) находится внутри другого. Внутренний цикл выполняется полностью для каждого прохода внешнего цикла. Это позволяет создавать более сложные итерационные процессы, которые невозможно реализовать с использованием одного цикла.
Принцип работы:
- Внешний цикл: Запускается первым и выполняется определенное количество раз.
- Внутренний цикл: Запускается каждый раз, когда внешний цикл выполняется. Таким образом, внутренний цикл выполняется полностью для каждого значения внешнего цикла.
Для понимания принципа работы вложенных циклов представьте, что внешний цикл — это один набор задач, а внутренний цикл — это набор задач, который выполняется для каждого элемента из набора внешнего цикла.
Пример 1: Таблица умножения
Создание таблицы умножения — это классический пример использования вложенных циклов for
. Мы можем создать таблицу умножения для чисел от 1 до 3.
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} x {j} = {i * j}", end='\t')
print() # Печать пустой строки для перехода на новую строку
Вывод:
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9
Этот пример демонстрирует создание таблицы умножения. Внешний цикл управляет строками таблицы, а внутренний цикл — столбцами.
Применение вложенных циклов
Вложенные циклы полезны при работе с многомерными структурами данных, такими как матрицы, таблицы и списки списков. Они позволяют эффективно перебирать и обрабатывать элементы таких структур.
Пример 2: Перебор двумерного списка
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=' ')
print() # Печать пустой строки для разделения строк матрицы
Вывод:
1 2 3
4 5 6
7 8 9
Здесь внешний цикл перебирает строки матрицы, а внутренний цикл перебирает элементы внутри каждой строки. Это позволяет вывести матрицу в виде таблицы.
Как работают вложенные циклы на практике
Вложенные циклы часто используются для решения задач, связанных с созданием и обработкой многомерных данных. Рассмотрим несколько практических примеров.
Пример 3: Генерация всех возможных комбинаций
numbers = [1, 2]
letters = ['a', 'b']
for number in numbers:
for letter in letters:
print(f"({number}, {letter})")
Вывод:
Этот пример демонстрирует использование вложенных циклов для создания всех возможных пар чисел и букв.
Углубленный пример: Работа с трёхмерными данными
Пример 4: Перебор трёхмерного массива
three_dimensional = [
[
[1, 2],
[3, 4]
],
[
[5, 6],
[7, 8]
]
]
for i in range(len(three_dimensional)):
for j in range(len(three_dimensional[i])):
for k in range(len(three_dimensional[i][j])):
print(f"Element at ({i}, {j}, {k}) = {three_dimensional[i][j][k]}")
Вывод:
Element at (0, 0, 0) = 1
Element at (0, 0, 1) = 2
Element at (0, 1, 0) = 3
Element at (0, 1, 1) = 4
Element at (1, 0, 0) = 5
Element at (1, 0, 1) = 6
Element at (1, 1, 0) = 7
Element at (1, 1, 1) = 8
Этот пример иллюстрирует работу с трёхмерным массивом, где используется три вложенных цикла для доступа к элементам на разных уровнях структуры.
Важные аспекты и оптимизация
- Количество итераций: Вложенные циклы увеличивают общее количество итераций. Например, два вложенных цикла
for i in range(n)
иfor j in range(m)
приводят кn * m
итерациям. При большом количестве данных это может привести к значительным вычислительным затратам. - Оптимизация кода: Иногда можно избежать использования вложенных циклов или уменьшить их количество. Это возможно, если задачи можно решить с использованием встроенных функций или более эффективных алгоритмов.
- Читаемость кода: Вложенные циклы могут усложнить чтение кода. Старайтесь использовать вложенные циклы только тогда, когда это действительно необходимо, и старайтесь делать код как можно более понятным.
Дополнительные примеры
Пример 5: Создание шахматной доски
size = 8
for i in range(size):
for j in range(size):
if (i + j) % 2 == 0:
print("W", end=' ')
else:
print("B", end=' ')
print()
Вывод:
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
Этот пример создает шахматную доску, где W
обозначает белую клетку, а B
— черную.
Пример 6: Суммирование чисел в строках
data = [
"1 2 3",
"4 5 6",
"7 8 9"
]
for line in data:
numbers = map(int, line.split())
total = 0
for number in numbers:
total += number
print(f"Sum of numbers in line '{line}': {total}")
Вывод:
Sum of numbers in line '1 2 3': 6
Sum of numbers in line '4 5 6': 15
Sum of numbers in line '7 8 9': 24
В этом примере внешний цикл проходит по строкам, а внутренний — по числам в строке. Мы суммируем числа в каждой строке.
Пример 7: Сложный анализ данных
sales = [
[100, 200, 150], # Январь, Февраль, Март
[120, 210, 160], # Апрель, Май, Июнь
[130, 220, 170] # Июль, Август, Сентябрь
]
total_sales = [0, 0, 0] # Список для хранения суммарных продаж по месяцам
for month in range(len(total_sales)):
for product_sales in sales:
total_sales[month] += product_sales[month]
print("Total sales per month:", total_sales)
Вывод:
Total sales per month: [350, 630, 480]
Этот пример суммирует продажи по месяцам из списка продаж для различных товаров.
Пример 8: Генерация пар чисел
nums = [1, 2]
letters = ['x', 'y']
for num in nums:
for letter in letters:
print(f"({num}, {letter})")
Вывод:
(1, x)
(1, y)
(2, x)
(2, y)
Этот пример показывает, как создать все возможные пары из двух списков.
Вложенные циклы for
— это мощный инструмент для работы с многомерными данными и решения сложных задач. Они позволяют обрабатывать сложные структуры данных и выполнять многократные переборы