W3docs

Циклы for в Python

Узнайте, как работают циклы for в Python: синтаксис, range(), enumerate(), break, continue, else, вложенные циклы и перебор списков, строк и словарей.

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

В этой главе рассматриваются:

  • Базовый синтаксис и принцип работы переменной цикла
  • Функция range() для циклов с подсчётом итераций
  • break, continue и блок else
  • enumerate() и zip() для более гибкого перебора
  • Перебор строк, словарей и вложенных структур
  • Вложенные циклы for
  • Оператор pass как заглушка

Базовый синтаксис

for variable in iterable:
    # block executed once per item

variable присваивается каждый следующий элемент из iterable. Блок с отступом выполняется один раз для каждого элемента.

Перебор списка

python— editable, runs on the server

Вывод:

apple
banana
cherry

Цикл присваивает "apple" переменной fruit, выполняет print(fruit), затем переходит к "banana" и так далее, пока все элементы не будут перебраны.

Перебор строки

Строка сама по себе является итерируемым объектом — каждый символ является элементом:

for ch in "Python":
    print(ch)

Вывод:

P
y
t
h
o
n

Функция range()

range() генерирует последовательность целых чисел по мере необходимости. Это наиболее распространённый способ запустить цикл заданное количество раз.

range(stop)
range(start, stop)
range(start, stop, step)
ПараметрПо умолчаниюЗначение
start0Начальное значение (включительно)
stopобязательныйВерхняя граница (не включается)
step1Шаг между значениями

Подсчёт от 1 до 5

python— editable, runs on the server

Вывод:

1
2
3
4
5

range(1, 6) порождает 1, 2, 3, 4, 5 — значение 6 (граница stop) не включается.

Перебор с шагом

for i in range(0, 10, 2):
    print(i)

Вывод:

0
2
4
6
8

Обратный счёт

Отрицательный шаг выполняет перебор в обратном порядке:

for i in range(10, 0, -2):
    print(i)

Вывод:

10
8
6
4
2

Оператор break

break немедленно завершает цикл, до того как будут перебраны все элементы.

for i in range(1, 6):
    if i == 3:
        break
    print(i)

Вывод:

1
2

Как только i становится равным 3, срабатывает break и цикл останавливается — 3, 4 и 5 никогда не выводятся.

Когда использовать break: поиск по списку с остановкой при нахождении совпадения; досрочный выход из длительного вычисления.


Оператор continue

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

for i in range(1, 6):
    if i == 3:
        continue
    print(i)

Вывод:

1
2
4
5

Когда i равно 3, continue пропускает print(i) и переходит к i = 4.


Блок else

Цикл for в Python поддерживает необязательный блок else, который выполняется только если цикл завершился нормально (то есть не был прерван оператором break).

for i in range(1, 4):
    print(i)
else:
    print("Loop finished")

Вывод:

1
2
3
Loop finished

Если цикл завершился через break, блок else пропускается:

for i in range(1, 6):
    if i == 3:
        break
    print(i)
else:
    print("Loop finished without break")

Вывод:

1
2

Блок else удобен для сигнализирования об успехе поиска — если вы делаете break при нахождении совпадения, блок else выполняется только тогда, когда совпадение не найдено.


enumerate() — цикл с индексом и значением

enumerate() связывает каждый элемент с его позиционным индексом, так что вы получаете и то, и другое в одном цикле без отдельной переменной-счётчика.

colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
    print(index, color)

Вывод:

0 red
1 green
2 blue

Чтобы начать отсчёт с другого числа, передайте start:

fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
    print(i, fruit)

Вывод:

1 apple
2 banana
3 cherry

zip() — одновременный перебор двух последовательностей

zip() попарно объединяет элементы двух (или более) итерируемых объектов:

names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
    print(name, score)

Вывод:

Alice 95
Bob 87
Charlie 92

zip() останавливается, когда исчерпывается самый короткий итерируемый объект.


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

Перебор словаря по умолчанию возвращает его ключи:

person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
    print(key, ":", person[key])

Вывод:

name : Alice
age : 30
city : Paris

Используйте .items(), чтобы получать пары ключ-значение вместе:

for key, value in person.items():
    print(key, ":", value)

Вывод:

name : Alice
age : 30
city : Paris

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


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

Цикл for можно поместить внутрь другого цикла for. Внутренний цикл выполняется полностью при каждой отдельной итерации внешнего цикла.

python— editable, runs on the server

Вывод:

red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherry

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


Оператор pass

pass — это пустая операция-заглушка. Используйте его, когда синтаксис требует наличия цикла for, но вам пока нечего поместить в его тело:

for i in range(3):
    pass  # TODO: implement later

Без pass Python выдал бы ошибку IndentationError, так как пустой блок является недопустимым синтаксисом.


Циклы for и списковые включения

Распространённый шаблон — формирование нового списка внутри цикла for:

squares = []
for x in range(1, 6):
    squares.append(x ** 2)
print(squares)

Вывод: [1, 4, 9, 16, 25]

Python предлагает более лаконичную альтернативу — списковое включение:

squares = [x ** 2 for x in range(1, 6)]
print(squares)

Вывод: [1, 4, 9, 16, 25]

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


Выбор между for и while

СитуацияПредпочтительный вариант
Известно количество итераций или есть итерируемый объектfor
Цикл выполняется до изменения условияwhile
Нужны индекс и значениеfor + enumerate()
Перебор двух списков одновременноfor + zip()

Практика

Практика
Which built-in function generates a sequence of integers for use in a for loop?
Which built-in function generates a sequence of integers for use in a for loop?
Практика
What does the else clause of a for loop do?
What does the else clause of a for loop do?
Практика
What are the primary uses of for loops in Python?
What are the primary uses of for loops in Python?
Was this page helpful?