Как использовать цикл for в Python

Краткое определение
Цикл for в Python проходит по каждому элементу итерируемого объекта (iterable) и выполняет набор инструкций для каждого элемента.
Важно: iterable — это объект, по которому можно пройтись в цикле (список, строка, кортеж, словарь, множество, генератор и т.д.).
Как работает цикл for в Python
Цикл for перебирает элементы последовательности один за другим. В простейшем виде конструкция выглядит так:
for переменная in последовательность:
выполняемые_операцииКаждой итерации соответствует присваивание следующего элемента последовательности имени переменной и выполнение блока кода. Если последовательность пуста — тело цикла не выполнится ни разу.
Однострочное пояснение
for — предназначен для строго известного набора итераций; while — для ситуаций с неопределённым числом повторов.
Базовые примеры
Вывод каждого элемента списка:
items = ["shoe", "bag", "shirts", "lamp"]
for i in items:
print(i)Вывод элементов, содержащих букву “a”:
items = ["shoe", "bag", "shirts", "lamp"]
for i in items:
if "a" in i:
print(i)Цикл с блоком else — выполняется, когда цикл завершился нормально (без break):
b = [2, 3, 5, 6]
for i in b:
print(i)
else:
print("Loop has ended")Использование break для преждевременного выхода:
b = [2, 3, 5, 6]
for i in b:
if i > 3:
break
print(i)Использование continue для пропуска текущей итерации:
b = [2, 3, 5, 6]
for i in b:
if i > 3:
continue
print(i)Диапазоны и шаги: range
range генерирует последовательность чисел. Часто используется вместе с for:
for x in range(1, 101):
print(x)
for x in range(1, 101):
if x % 2 == 1:
print(x)
# Таблица умножения на 2 для нечётных чисел
for x in range(1, 101):
if x % 2 == 1:
print(x, "x", 2, "=", x * 2)Советы по range:
- range(stop)
- range(start, stop)
- range(start, stop, step)
Работа со строками
Строка — итерируемый объект: цикл проходит по символам.
a = "How to use a for loop in Python"
for ch in a:
print(ch)Подсчёт символов и слов (пояснение):
- Метод count(‘’) возвращает число вхождений пустой подстроки; результат равен длине строки + 1.
- Для подсчёта символов лучше использовать len(s).
Примеры:
a = "How to use a for loop in Python"
print(len(a)) # количество символов, включая пробелы
print(len(a.split())) # количество словАльтернативный способ с list comprehension:
a = ["How to use a for loop in Python"]
c = [len(b) for b in a]
print(c) # [32] при текущей строкеДля подсчёта слов:
a = ["How to use a for loop in Python"]
c = [len(b.split()) for b in a]
print(c) # [8]Итерация по массивам и словарям
Пример: выбираем больных особей и помещаем в карантин.
array = [
{"name": "Sheep1", "healthy": "Yes"},
{"name": "Sheep3", "healthy": "No"},
{"name": "Sheep4", "healthy": "Yes"},
{"name": "Sheep5", "healthy": "Yes"},
{"name": "Sheep8", "healthy": "No"},
{"name": "Sheep7", "healthy": "No"},
{"name": "Sheep9", "healthy": "No"}
]
for sheep in array:
if sheep["healthy"] == "No":
print("Quarantine", sheep["name"])Итерация по словарю возвращает ключи по умолчанию:
d = {"name": "Python", "method": "write"}
for key in d:
print(key)
# чтобы получить и ключи, и значения:
for key, value in d.items():
print(key, value)Вложенные циклы
Вложенные циклы полезны для обработки структур с несколькими уровнями.
nested_list = [[1, 2, 4, 5], {"name": "Python", "method": "write"}]
for block in nested_list:
for item in block:
print(item)Примечание: при итерации по словарю во внутреннем цикле вы получите ключи словаря.
Полезные приёмы и конструкции
- enumerate: индекс + значение
for idx, val in enumerate([10, 20, 30]):
print(idx, val)- zip: параллельная итерация по нескольким последовательностям
for a, b in zip([1, 2], ["a", "b"]):
print(a, b)- reversed/sorted: итерация в обратном или отсортированном порядке
for x in reversed([1, 2, 3]):
print(x)- List comprehension как компактная замена простым for
squares = [x * x for x in range(10)]- Генераторы и итераторы для ленивых вычислений
Когда for не подходит (контрпример)
- Нужно выполнять цикл до наступления внешнего события (например, чтение сокета) — обычно while подходит лучше.
- Нужен бесконечный цикл с явным условием остановки извне — while более явный.
- Операция требует одновременной обработки очень больших данных — рассмотрите генераторы, itertools или потоковое чтение.
Альтернативы и сопутствующие инструменты
- while — для неизвестного числа итераций
- list/dict/set comprehensions — компактный синтаксис для создания коллекций
- map/filter — функциональный стиль обработки
- itertools — инструменты для сложной итерации (chain, islice, groupby)
Как выбрать: for или while
flowchart TD
A[Есть набор элементов/известный диапазон?] -->|Да| B[Используйте for]
A -->|Нет| C[Нужны внешние/непредсказуемые условия?]
C -->|Да| D[Используйте while]
C -->|Нет| E[Подумайте о генераторе или iterator]Критерии приёмки
- Код проходит тесты, описанные ниже.
- Для списочных преобразований используется list comprehension или понятный for.
- Нет лишних перечислений индексов, когда можно использовать enumerate.
Тесты и случаи приёмки
- Вывод элементов списка
- Вход: [“a”, “b”, “c”]
- Ожидаемый вывод: a\nb\nc
- Прерывание при первом значении > 3
- Вход: [1, 4, 2]
- Ожидаемый вывод: 1
- Подсчёт слов
- Вход: “Hello world”
- Ожидаемый вывод: 2
Шпаргалка (cheat sheet)
- Синтаксис for: for x in iterable:
- enumerate(iterable) -> (index, value)
- zip(a, b, …) -> кортежи элементов параллельно
- range(start, stop[, step]) для числовых диапазонов
- list comprehension: [expr for x in iterable if cond]
- break — прерывает цикл
- continue — пропускает текущую итерацию
- else после for выполняется при нормальном завершении
Рольовые чек-листы (для разработчика и ревьюера)
Для разработчика:
- Используйте понятные имена переменных (i, j — только в кратких циклах).
- Проверяйте граничные случаи (пустые последовательности).
- Предпочитайте enumerate/zip, чтобы избежать ошибок с индексами.
Для ревьюера:
- Есть ли более простая конструкция (comprehension вместо цикла)?
- Нет ли лишних вычислений внутри цикла?
- Обработаны ли пустые входные данные?
Практические примеры (кейсы и исключения)
- Собрать только уникальные элементы с сохранением порядка:
seen = set()
result = []
for x in items:
if x in seen:
continue
seen.add(x)
result.append(x)- Построить словарь частот слов:
text = "a b a c"
freq = {}
for w in text.split():
freq[w] = freq.get(w, 0) + 1- Вложенная итерация для матрицы:
matrix = [[1,2],[3,4]]
for row in matrix:
for val in row:
print(val)Безопасность и производительность
- Для больших последовательностей используйте генераторы или выражения-генераторы, чтобы не выделять память под всю коллекцию.
- В цикле избегайте дорогостоящих операций (запросы в базу, повторная конвертация) — выносите их за цикл или кешируйте результат.
Краткая методология: как написать чистый цикл for
- Чётко определить входную последовательность.
- Решить, нужен ли индекс — если да, использовать enumerate.
- Продумать выход из цикла (break) и исключительные случаи (continue).
- Тестировать на пустом и граничном входе.
Глоссарий (одно предложение на термин)
- iterable: объект, по которому можно пройтись в цикле.
- iterator: объект, который возвращает следующий элемент при вызове next().
- comprehension: компактный синтаксис для создания коллекций.
- generator: ленивый объект, создающий элементы по требованию.
Сводка
- Цикл for — основной инструмент для обработки последовательностей в Python.
- Пользуйтесь enumerate и zip, когда нужны индексы или параллельные итерации.
- Для больших данных отдавайте предпочтение генераторам и itertools.
См. также: Как создавать и использовать собственные модули в Python
Похожие материалы
Исправить «preparing security options» в Windows
Как добавить Bluetooth на ПК
Улучшение звука Hi-Res без больших затрат
Apple Music Lossless: как включить и нужен ли он
Home Assistant на Raspberry Pi — локальный умный дом