Управляющие конструкции: циклы
Какие циклы существуют в Python
Основным и наиболее эффективным инструментом для повторения действий в Python является цикл for. Он используется для перебора элементов любой итерируемой последовательности: списков, строк, кортежей, словарей, множеств, а также объектов, созданных функцией range().
Пример базовой итерации:
for i in range(5):
print(i)значение range в python (значение range() в python)
Результат:
0 1 2 3 4
значение while в python (значение while в python)
Цикл for автоматически завершается при исчерпании итератора. Это исключает ошибки, связанные с неправильной инициализацией или обновлением счетчика, что характерно для циклов в других языках.
Для получения индекса вместе с элементом применяется встроенная функция enumerate():
fruits = ['яблоко', 'банан', 'вишня']
for idx, fruit in enumerate(fruits):
print(f'{idx}: {fruit}')
как сделать бесконечный цикл в python (создание бесконечного цикла в python)
0: яблоко 1: банан 2: вишня
цикл с параметром в python (цикл с параметром в python)
Как организовать цикл с проверкой условия после каждой итерации?
Для этого применяется цикл while. Он выполняется до тех пор, пока истинно заданное условие.
count = 0
while count < 3:
print('Итерация', count)
count += 1цикл while python пример (пример цикла while в python)
Итерация 0 Итерация 1 Итерация 2
алгоритм while python (цикл while в python)
Типичная ошибка:
Забытое обновление переменной условия приводит к бесконечному циклу. Решение - всегда контролировать изменение условия внутри тела цикла.
Как перебрать все элементы многомерной структуры?
Используются вложенные циклы. Один цикл проходит по внешнему измерению, второй - по внутреннему.
matrix = [[1, 2], [3, 4], [5, 6]]
for row in matrix:
for item in row:
print(item, end=' ')Python бесконечный (бесконечный цикл while в python)
1 2 3 4 5 6
какие циклы существуют в python (какие циклы существуют в python?)
Проблема:
Глубокие вложения ухудшают читаемость и производительность. Альтернатива - использование itertools.chain() или генераторов.
Как прервать или пропустить итерацию по условию?
Инструкция break немедленно завершает цикл, continue переходит к следующей итерации, пропуская оставшуюся часть тела.
for num in range(10):
if num == 5:
break
if num % 2 == 0:
continue
print(num)команда break в python (оператор break в python)
1 3
программирование циклических алгоритмов python (циклические алгоритмы в python)
Здесь continue пропускает чётные числа, а break останавливает цикл при достижении 5.
Как выполнить код после успешного завершения цикла без break?
К циклам for и while можно добавлять необязательный блок else. Он выполняется, только если цикл завершился естественным образом (без break).
for n in range(2, 6):
for x in range(2, n):
if n % x == 0:
print(f'{n} равно {x} * {n//x}')
break
else:
print(f'{n} - простое число')2 - простое число 3 - простое число 4 равно 2 * 2 5 - простое число
Как пройти по ключам, значениям или парам словаря?
Цикл for по умолчанию перебирает ключи. Для получения значений или пар используются методы .values() и .items().
d = {'a': 1, 'b': 2}
for key in d:
print(key, d[key])
for val in d.values():
print(val)
for k, v in d.items():
print(k, v)Как заменить итерацию рекурсивными вызовами?
Рекурсия - функция, вызывающая саму себя. Она не является циклом в прямом смысле, но позволяет реализовать повторение без явного for или while.
def factorial(n):
if n == 0:
return 1
return n * factorial(n-1)
print(factorial(5))120
Опасность:
Глубина рекурсии ограничена (по умолчанию ~1000). Превышение вызывает RecursionError. Для глубоких итераций лучше использовать стек на основе while.
Расширенные примеры использования циклов
Генераторы и yield
Генераторы создают последовательности на лету, экономя память.
def fibonacci(limit):
a, b = 0, 1
while a < limit:
yield a
a, b = b, a + b
for num in fibonacci(100):
print(num, end=' ')0 1 1 2 3 5 8 13 21 34 55 89
Бесконечная итерация с itertools.cycle
Модуль itertools предоставляет инструменты для работы с итераторами.
from itertools import cycle
colors = ['красный', 'зеленый', 'синий']
cycling = cycle(colors)
for _ in range(6):
print(next(cycling))красный зеленый синий красный зеленый синий
Параллельная итерация с zip
Объединяет несколько последовательностей в кортежи.
names = ['Анна', 'Борис', 'Виктор']
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f'{name}: {score}')Анна: 85 Борис: 92 Виктор: 78
Обход дерева с помощью стека (эмуляция рекурсии)
tree = {
'value': 1,
'children': [
{'value': 2, 'children': []},
{'value': 3, 'children': [
{'value': 4, 'children': []}
]}
]
}
def traverse(node):
stack = [node]
while stack:
current = stack.pop()
print(current['value'])
stack.extend(current['children'][::-1])
print('Итеративный обход:')
traverse(tree)Итеративный обход: 1 2 3 4
Собственный итератор с __iter__ и __next__
class Countdown:
def __init__(self, start):
self.current = start
def __iter__(self):
return self
def __next__(self):
if self.current <= 0:
raise StopIteration
self.current -= 1
return self.current + 1
for num in Countdown(3):
print(num)3 2 1
Асинхронный цикл async for
Используется для итерации по асинхронным итераторам (например, чтение данных из сети).
import asyncio
class AsyncRange:
def __init__(self, n):
self.i = 0
self.n = n
def __aiter__(self):
return self
async def __anext__(self):
if self.i >= self.n:
raise StopAsyncIteration
await asyncio.sleep(0.1)
self.i += 1
return self.i
async def main():
async for x in AsyncRange(3):
print(x)
asyncio.run(main())1 2 3
Цикл с else и break при поиске
values = [10, 25, 30, 45, 50]
for v in values:
if v > 40:
print('Найдено значение > 40:', v)
break
else:
print('Все значения не превышают 40')Найдено значение > 40: 45