Итерации и циклы
Представьте, что вам нужно повторить какое-то действие много раз. Например, поприветствовать каждого гостя на вечеринке или пересчитать все элементы в списке. Делать это вручную было бы утомительно. И здесь на помощь приходят циклы! 🔄
Циклы помогают автоматизировать повторяющиеся действия, позволяя вам выполнять один и тот же блок кода несколько раз. Это экономит время и делает ваш код более чистым и эффективным.
Что такое итерации и циклы?
Итерация — это однократное выполнение набора инструкций. А цикл — это конструкция, которая позволяет выполнять блок кода многократно, пока выполняется определенное условие.
Python предлагает два основных типа циклов:
- Цикл for: используется для итерации по последовательности (списку, кортежу, строке и т.д.)
- Цикл while: выполняется, пока указанное условие остается истинным
Цикл for
Цикл for используется для перебора элементов последовательности (списка, кортежа, строки и т.д.). Это самый распространенный тип цикла в Python.
Синтаксис цикла for
Базовый синтаксис цикла for выглядит так:
# Простой пример цикла for >>> fruits = ["яблоко", "банан", "вишня"] >>> for fruit in fruits: ... print(f"Я люблю {fruit}!")
Я люблю яблоко!Я люблю банан!Я люблю вишня!
В этом примере:
- fruit — это переменная-итератор, которая принимает значение каждого элемента в списке fruits по очереди
- Тело цикла выполняется для каждого элемента в списке
- После : следует блок кода с отступом, который выполняется в каждой итерации
Итерация по диапазону чисел
Часто нам нужно выполнить цикл определенное количество раз. Для этого используется функция range():
# Использование range() для создания последовательности чисел >>> for i in range(5): # от 0 до 4 ... print(f"Число: {i}")
Число: 0Число: 1Число: 2Число: 3Число: 4
Функция range() создает последовательность чисел и имеет несколько вариантов использования:
# Варианты использования range() # range(stop): от 0 до stop-1 >>> for i in range(3): ... print(i, end=" ") ... print() # Для переноса строки
0 1 2# range(start, stop): от start до stop-1 >>> for i in range(2, 5): ... print(i, end=" ") ... print()2 3 4# range(start, stop, step): от start до stop-1 с шагом step >>> for i in range(1, 10, 2): # Нечетные числа от 1 до 9 ... print(i, end=" ")1 3 5 7 9
Итерация по строкам
Строки в Python также являются последовательностями, поэтому мы можем перебирать их символы:
# Перебор символов в строке >>> message = "Python" >>> for char in message: ... print(char)
Python
Итерация с индексами
Иногда нам нужны как элементы, так и их индексы. Для этого используется функция enumerate():
# Получение индексов и значений >>> fruits = ["яблоко", "банан", "вишня"] >>> for index, fruit in enumerate(fruits): ... print(f"Индекс {index}: {fruit}")
Индекс 0: яблокоИндекс 1: бананИндекс 2: вишня
Цикл while
Цикл while выполняется до тех пор, пока указанное условие остается истинным. Это полезно, когда мы не знаем заранее, сколько раз должен выполниться цикл.
Синтаксис цикла while
# Простой пример цикла while >>> count = 1 >>> while count <= 5: ... print(f"Цикл выполняется в {count}-й раз") ... count += 1 # Увеличиваем счетчик
Цикл выполняется в 1-й разЦикл выполняется в 2-й разЦикл выполняется в 3-й разЦикл выполняется в 4-й разЦикл выполняется в 5-й раз
В этом примере:
- Цикл выполняется, пока count <= 5
- Внутри цикла мы увеличиваем count на 1 в каждой итерации
- Когда count становится равным 6, условие становится ложным, и цикл завершается
Важно: В цикле while всегда нужно изменять переменную, участвующую в условии, иначе цикл может стать бесконечным!
Бесконечный цикл
Если условие в цикле while всегда истинно, цикл будет выполняться бесконечно. Это может быть полезно, но обычно требуется способ выхода из такого цикла:
# Пример с явным прерыванием бесконечного цикла >>> counter = 0 >>> while True: # Это условие всегда истинно ... print(f"Итерация {counter}") ... counter += 1 >>> if counter >= 5: # Условие для выхода из цикла ... print("Выходим из цикла!") ... break # Прерывает выполнение цикла
Итерация 0Итерация 1Итерация 2Итерация 3Итерация 4Выходим из цикла!
Управление циклами
Python предоставляет несколько инструментов для управления выполнением циклов.
Оператор break
Оператор break позволяет немедленно выйти из цикла, независимо от условия:
# Использование break для выхода из цикла >>> for i in range(10): ... print(i, end=" ") ... if i == 5: ... print("\nДостигнуто число 5, выходим из цикла!") ... break
0 1 2 3 4 5Достигнуто число 5, выходим из цикла!
Оператор continue
Оператор continue пропускает текущую итерацию и переходит к следующей:
# Использование continue для пропуска итераций >>> for i in range(10): ... # Пропускаем четные числа ... if i % 2 == 0: ... continue ... print(i, end=" ")
1 3 5 7 9
Блок else в циклах
Циклы for и while могут иметь блок else, который выполняется, когда цикл завершается нормально (не через break):
# Использование else с циклом >>> for i in range(5): ... print(i, end=" ") ... else: ... print("\nЦикл завершен нормально")
0 1 2 3 4Цикл завершен нормально# Пример с break - блок else не выполнится >>> for i in range(5): ... print(i, end=" ") ... if i == 2: ... break ... else: ... print("\nЭта строка не будет выведена, так как цикл прерван")0 1 2
Вложенные циклы
Циклы можно вкладывать друг в друга для обработки многомерных структур данных или решения более сложных задач:
# Пример вложенных циклов - таблица умножения >>> for i in range(1, 4): # Строки ... for j in range(1, 4): # Столбцы ... print(f"{i} × {j} = {i*j}", end="\t") ... print() # Переход на новую строку после каждой строки таблицы
1 × 1 = 1 1 × 2 = 2 1 × 3 = 32 × 1 = 2 2 × 2 = 4 2 × 3 = 63 × 1 = 3 3 × 2 = 6 3 × 3 = 9
Совет: Вложенные циклы могут быть ресурсоемкими, особенно при большом количестве итераций. Используйте их осторожно и ищите более эффективные альтернативы для обработки больших объемов данных.
Списковые включения (List Comprehensions)
Списковые включения (или генераторы списков) — это элегантный способ создания списков в одну строку с использованием синтаксиса, похожего на цикл for:
# Создание списка квадратов чисел от 0 до 9 # Обычный способ >>> squares = [] >>> for i in range(10): ... squares.append(i**2) ... print(f"Обычный способ: {squares}")
Обычный способ: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# С использованием списковых включений >>> squares_comprehension = [i**2 for i in range(10)] >>> print(f"Через списковое включение: {squares_comprehension}")Через списковое включение: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Списковые включения могут также содержать условия:
# Фильтрация с помощью условия: только четные числа >>> even_squares = [i**2 for i in range(10) if i % 2 == 0] >>> print(f"Квадраты четных чисел: {even_squares}")
Квадраты четных чисел: [0, 4, 16, 36, 64]
Проверка понимания
Давайте проверим, насколько хорошо вы усвоили тему циклов:
Какой результат даст следующий код?
total = 0 for i in range(1, 5): if i % 2 == 0: total += i print(total)