Python: уроки, справочник и задачи

Цикл for в Python

Раздел: Основы Python · Обновлено 31.10.2026

Цикл for в Python перебирает элементы любой коллекции: списка, строки, словаря, файла. Здесь вы научитесь проходить по списку, генерировать последовательности чисел через range(), сочетать цикл с условиями и досрочно останавливать его оператором break.

Примеры проверены на Python 3.12 и 3.13. В новом разделе собраны приемы, которые делают циклы короче и надежнее: нумерация через enumerate(), параллельный обход через zip(), перебор словаря и блок else у цикла, который решает задачу поиска без лишних флагов и повторных сообщений.

Цикл for в Python
Фото: Basile Morin / CC BY-SA 4.0, Wikimedia Commons
Содержание статьи
  1. Функция range
  2. Приемы с for: enumerate, zip, словари и for-else
    1. Поиск элемента с for-else
    2. Номер элемента через enumerate
    3. Параллельный обход через zip
    4. Перебор словаря
    5. Частые ошибки
  3. Частые вопросы
    1. Как пройти по списку в обратном порядке?
    2. Чем break отличается от continue?
    3. Можно ли использовать переменную цикла после его окончания?
    4. Как выйти сразу из двух вложенных циклов?

Циклы являются неотъемлемой частью в любом языке программирования. Для чего нужны циклы? Представьте себе задачу в которой вам необходимо перебрать элементы в списке, определить какое то соответствие и вывести результат. Задача является простой, если у вас немного элементов, а что если у вас тысячу разных элементов? В данном случае, мы с вами можем организовать цикл, в котором будем перебирать элементы, проводить с каждым элементом нужные нам операции, и выводить результат, вся муторная работа будет выполнена за вас вашим скриптом. И так долой теорию, разберем принцип работы цикла на практике.

Представим себе, что у нас есть список, с именами животных.

animals = ['Кошка', 'Собака', 'Лошадь', 'Черепаха'] 
for animal in animals:
    print("Привет " + animal)

Результат:
Привет Кошка 
Привет Собака 
Привет Лошадь 
Привет Черепаха

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

Функция range

Функция range

В целом мы с вами разобрались с тем, как работает цикл for, вместе с ней довольно часто используется функция range. С помощью данной функции, мы можем генерировать числа, например:

print (list(range(10))) # Сгенерирует нам числа от 0 до 9(10 чисел)

Функция range(), позволяет нам генерировать числа не только в строгой последовательности, мы можем задать начало, конец, и шаг генерации, выглядит это так:

print(list(range(2,50, 4)))  # от 2-х до 50 с шагом 4
Результат:

[2, 6, 10, 14, 18, 22, 26, 30, 34, 38, 42, 46]

Если мы не задаем шаг, то в Python этот шаг по умолчанию равен 1. Так же мы можем конечно использовать данную функцию вместе с циклом for. Пример:

for i in range(20): # При каждой итерации цикла, в переменную i попадает сгенерированное числа от 0 до 19.
    if i >= 10: # При каждой итерации сравнивание наше в i с нашим условием
        print(i) # Если число находящееся в данной итерации соответствует нашему условию, отправляем его в печать

"""
То есть, при первом проходе цикла, переменная i равна 0, соответственно 0 не является большим или равным 10
поэтому он не печатается. При втором проходе цикла, i равен уже 1, но 1 тоже не подходит под наше условие, поэтому
его тоже пропускаем. Через некоторое время, цикл доходит например до 11ой итерации, и в этом проходе, наша переменная
уже равно 10 что подходит нашему условию, и соответственно мы его пропускаем дальше.
"""

Результат:

10
11
12
13
14
15
16
17
18
19

В цикле выше, мы свами рассмотрели сразу два момента, это использование функции range(), и условие if, думаю вам уже понятно, что внутри цикла мы можем создавать уже знакомые нам конструкции с условиями. Рассмотрим пример, в котором мы скомбинируем цикл for, список, и конструкцию if...else.

student_name = 'Тимур' # Имя студента
student_list = ['Саша','Таня','Настя','Тимур', 'Вадим'] # Список студентов
for student in student_list: # Перебираем список студентов, и на каждом проходе цикла поочередно заносим всех студентов в переменную student
    if student == student_name: # если значение student == student_name
        print(f' Студент {student_name} найден.') # Условие выполнено
        break # Остановка цикла
    else:
        print(f' Студент {student_name} не найден.') # Результат, если условие не выполнено
Результат:
Студент Тимур найден.

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

Следующий урок: Цикл while

Приемы с for: enumerate, zip, словари и for-else

Раздел включает: поиск элемента с for-else, номер элемента через enumerate, параллельный обход через zip, перебор словаря, частые ошибки.

Поиск элемента с for-else

Блок else можно поставить на одном уровне с for. Он выполнится, только если цикл дошел до конца и не был прерван break. Это идеальный инструмент для поиска: сообщение об отсутствии выводится один раз, а не на каждом шаге.

student_name = "Тимур"
students = ["Саша", "Таня", "Настя", "Тимур", "Вадим"]

for student in students:
    if student == student_name:
        print(f"Студент {student_name} найден.")
        break
else:
    print(f"Студент {student_name} не найден.")
# -> Студент Тимур найден.

Для простой проверки наличия цикл вообще не нужен: if student_name in students:.

Номер элемента через enumerate

for num, animal in enumerate(["Кошка", "Собака"], start=1):
    print(num, animal)
# -> 1 Кошка
# -> 2 Собака

Конструкция for i in range(len(items)) с обращением items[i] работает, но читается хуже и чаще приводит к ошибкам с индексами.

Параллельный обход через zip

names = ["Аня", "Борис"]
scores = [91, 78]
for name, score in zip(names, scores, strict=True):
    print(f"{name}: {score}")

Параметр strict=True (Python 3.10 и новее) выбросит ValueError, если списки разной длины. Без него zip() молча остановится на самом коротком.

Перебор словаря

prices = {"хлеб": 55, "сыр": 390}
for product, price in prices.items():
    print(product, price)

Обычный for key in prices перебирает только ключи, и для получения значения приходится писать prices[key]. Метод items() сразу отдает пары, values() только значения. Менять размер словаря во время обхода нельзя: добавление или удаление ключа внутри цикла вызовет RuntimeError. Если нужно удалить часть ключей, перебирайте копию списка ключей, for key in list(prices):, или соберите новый словарь генератором.

Частые ошибки

ОшибкаЧто происходитКак правильно
Удаление из списка во время обходаэлементы пропускаютсяitems = [x for x in items if x > 0]
range(1, 10) для чисел от 1 до 1010 не входитrange(1, 11)
Изменение переменной цикла внутри телана следующем шаге значение перезапишетсяиспользуйте while или отдельную переменную
else на уровне if вместо forсообщение выводится на каждой итерациивыровняйте else по for

Подробнее о нумерации читайте в статье enumerate python.

Частые вопросы

Короткие ответы на вопросы, которые чаще всего возникают по этой теме.

Как пройти по списку в обратном порядке?

Используйте for x in reversed(items): функция не копирует список. Для чисел подойдет range(10, 0, -1), он выдаст значения от 10 до 1.

Чем break отличается от continue?

break полностью завершает цикл, выполнение переходит к коду после него. continue пропускает остаток текущей итерации и сразу переходит к следующему элементу.

Можно ли использовать переменную цикла после его окончания?

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

Как выйти сразу из двух вложенных циклов?

break прерывает только внутренний цикл. Вынесите вложенные циклы в функцию и используйте return, это самый чистый способ. Альтернатива - флаг, который проверяется во внешнем цикле.