Гид по технологиям

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

5 min read Python Обновлено 31 Dec 2025
Как использовать цикл for в Python
Как использовать цикл for в Python

Обложка: Как использовать цикл for в Python

О чём эта статья

  • Что делает цикл for и как он работает в Python
  • Практические примеры: списки, строки, range, словари
  • Управление потоком: else, break, continue
  • Вложенные циклы и их подходящие случаи
  • Когда for не подходит и альтернативы
  • Шпаргалка, тесты приёмки и чек-листы для команд

Важно: все примеры используют чистый Python 3. Код можно запускать в интерпретаторе или в Jupyter.

Как работает for в Python

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

Ключевая идея: вы указываете переменную приёма значения и контейнер, а Python автоматически берёт по одному элементу за итерацию.

Простая формула:

for item in iterable:
    # использовать item

Пример ментальной модели: представьте очередь людей и табличку «обслуживают по одному». for — это поочерёдный вызов следующего человека из очереди.

Синтаксис и простые примеры

Вывод каждого элемента списка:

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: 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, числа и строки

Перебор чисел от 1 до 100:

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)

Итерация по строке — перебор символов:

a = "How to use a for loop in Python"
for ch in a:
    print(ch)

Подсчёт символов и слов. Обратите внимание: метод count рассчитывает количество вхождений подстроки.

a = ["How to use a for loop in Python"]
for i in a:
    print(i.count(''))  # число позиций между символами; не рекомендуем для длины

# Корректный способ получить длину строки
for i in a:
    print(len(i))  # длина в символах

# Подсчёт слов (простейший способ)
for i in a:
    print(len(i.split()))

Важно: использование i.count(‘’) для поиска длины — неочевидный приём. Предпочитайте len() для количества символов и split() для простого подсчёта слов.

Работа со словарями и массивами объектов

Пример: нужно найти и вывести имена больных овец (healthy == “No”):

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"])

Примечание: защищайте доступ к ключам, если данные могут быть неполными (use .get).

for sheep in array:
    if sheep.get("healthy") == "No":
        print("Quarantine", sheep.get("name", "Unknown"))

Вложенные циклы

Вложенные for удобны при работе со сложными структурами (матрицы, список списков, комбинирование наборов):

nested_list = [[1, 2, 4, 5], {"name": "Python", "method": "write"}]

for container in nested_list:
    for i in container:
        print(i)

Внимание: если в контейнере словарь, итерация даёт ключи по умолчанию. Для доступа к значениям используйте .items().

d = {"name": "Python", "method": "write"}
for k, v in d.items():
    print(k, v)

Когда for не подходит — контрпримеры

  • Не знаете количества итераций заранее и ожидаете события: лучше while. Например, ждать сигнала от внешней системы.
  • Нужно параллельное выполнение на уровне CPU — обычный for не даёт автоматической параллелизации; используйте multiprocessing или concurrent.futures.
  • Большие ленивые последовательности или бесконечные потоки: используйте генераторы и итераторы, чтобы не загружать память.

Пример: бесконечный ввод пользователя

# while удобнее для «пока не ввёл q»
while True:
    cmd = input('> ')
    if cmd == 'q':
        break

Альтернативы и идиомы

  • Списковые включения (list comprehensions): компактно и часто быстрее
squares = [x*x for x in range(10)]
  • Генераторы: экономят память для больших последовательностей
def gen_squares(n):
    for x in range(n):
        yield x*x
  • map / filter — функциональные альтернативы, иногда удобны для цепочек преобразований
evens = list(filter(lambda x: x % 2 == 0, range(10)))
  • itertools для комбинирования, оконных функций, каруселей

Шпаргалка: часто используемые шаблоны

  • Перебор с индексом: enumerate
for idx, val in enumerate(items, start=0):
    print(idx, val)
  • Одновременный перебор нескольких списков: zip
for a, b in zip(list1, list2):
    print(a, b)
  • Развернуть словарь по ключам и значениям
for k, v in my_dict.items():
    print(k, v)
  • Итерация в обратном порядке: reversed()
for x in reversed(range(10)):
    print(x)

Производительность и зрелость решения (heuristic)

  • Малые коллекции: прямой for отлично подходит.
  • Большие коллекции: рассмотрите генераторы или map/filter.
  • Ограничения по памяти: избегайте создания временных больших списков.
  • Параллельность: используйте библиотеки для параллелизма, если операции CPU-bound.

Критерии приёмки (тесты) — что проверить

  1. Для заданного списка функция возвращает все элементы в ожидаемом порядке.
  2. При использовании break функция корректно прекращает итерацию.
  3. При использовании continue значения, попавшие под условие, пропускаются.
  4. Для словаря .items() возвращают все пары ключ-значение.
  5. Для пустого списка код не выбрасывает исключений (безопасная обработка).

Пример unit-теста (pytest-псевдо):

def test_filter_contains_a():
    items = ["shoe", "bag", "shirts", "lamp"]
    result = [i for i in items if "a" in i]
    assert result == ["bag", "shirts", "lamp"]

Чек-листы по ролям

Разработчик:

  • Проверил поведение на пустых и граничных данных.
  • Не создаёт лишних списков для больших данных.
  • Использует .get для доступа к полям словаря.

Код-ревьювер:

  • Проверил, что цикл не даёт побочных эффектов вне ожиданий.
  • Убедился, что названия переменных читабельны (не i, j в сложной логике).
  • Проверил обработку исключений и неполных данных.

Администратор/интегратор:

  • Проверил нагрузку и потребление памяти при больших наборах данных.

Примеры приёмочных тестов (текст)

  • TestCase 1: вход [1,2,3], ожидается вывод 1,2,3. — PASS
  • TestCase 2: break при x>2 — цикл должен напечатать 1,2 только. — PASS
  • TestCase 3: словарь с отсутствующим ключом healthy — не должно падать.

Решения для отладки и rollback-план

  • Логи: вставьте логирование при каждой ключевой итерации (лог уровня DEBUG).
  • Rollback: если новая версия потребляет слишком много памяти, откатите до реализации с ленивой итерацией (yield).

Глоссарий (одно предложение на термин)

  • Итерируемый объект: объект, по которому можно пройтись в цикле (список, строка и т.д.).
  • Итератор: объект, который возвращает следующие элементы по запросу (реализует next).
  • Генератор: функция, которая отдаёт значения по одному и запоминает состояние (yield).
  • List comprehension: компактная запись для построения списков из итераций.

Примеры «когда это не работает» и как обходить

  • Очень длинные списки: вместо [f(x) for x in big_list] используйте (f(x) for x in big_list) и обработку по одному элементу.
  • Порядок не важен: если нужен любой порядок и важна скорость проверки вхождения, рассмотрите множества (set).

Резюме

Цикл for — основной инструмент перебора в Python. Он прост и выразителен. Знайте связанные инструменты: range, enumerate, zip, list comprehensions и генераторы. Выбирайте while, генераторы или библиотеки параллелизма там, где for неэффективен.

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

Примечание: используйте понятные имена переменных и стандартные идиомы Python — это упростит сопровождение кода.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Исправить время Windows при dual‑boot с Linux
Советы по ОС

Исправить время Windows при dual‑boot с Linux

Понижение напряжения CPU в игровом ноутбуке
Техничeская оптимизация

Понижение напряжения CPU в игровом ноутбуке

Сброс сетевых настроек Windows 11 — инструкция
Windows

Сброс сетевых настроек Windows 11 — инструкция

Как снизить напряжение GPU: undervolt с MSI Afterburner
GPU оптимизация

Как снизить напряжение GPU: undervolt с MSI Afterburner

Виджеты в macOS — настройка и советы
macOS

Виджеты в macOS — настройка и советы

Одноперсональный бизнес с помощью ИИ
Малый бизнес

Одноперсональный бизнес с помощью ИИ