Модуль 3 · Списки и циклы

Справочник по Python · модуль 3 · списки и циклы

Глава 3.3

3.3

Цикл for in:
перебор значений

for по очереди получает значения из строки, списка, диапазона или другой последовательности и выполняет один блок для каждого значения.

Категория
Циклы и перебор
Уровень
Начальный
Связанные темы
Строки, списки, range()
Зачем это знать
Обрабатывать элементы по одному без повторения кода

§1Что делает for

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

Pythonобщая форма
for переменная in последовательность:
    тело_цикла

После последовательности ставится двоеточие. Тело цикла записывается с отступом в четыре пробела.

§2Переменная цикла

main.pyпять значений по очереди
for number in [1, 2, 3, 4, 5]:
    print(number)
Выводпо одному значению
1
2
3
4
5
  1. number получает первое значение 1, затем выполняется print().
  2. Переменная получает 2, и тело выполняется снова.
  3. Так продолжается до последнего значения 5.
  4. Когда значения закончились, цикл завершается.

Название переменной выбирает программист. Лучше называть её по смыслу одного элемента: number, letter, name.

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

Строку можно перебирать посимвольно. На каждом повторении переменная получает один символ.

main.pyсимволы строки Python
for letter in "Python":
    print(letter)
Выводшесть повторений
P
y
t
h
o
n

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

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

main.pyтри элемента списка
numbers = [10, 20, 30]

for number in numbers:
    print(number)
Выводпорядок сохранён
10
20
30

§5Числа через range()

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

main.pyпять чисел начиная с нуля
for number in range(5):
    print(number)
Выводправая граница не входит
0
1
2
3
4

Следующая глава отдельно разбирает начало, границу и шаг range().

§6Досрочный выход: break

break немедленно завершает ближайший цикл. Значения, которые остались в последовательности, уже не обрабатываются.

main.pyостановка перед выводом 5
for number in range(10):
    if number == 5:
        break

    print(number)
Выводцикл завершён досрочно
0
1
2
3
4

§7Пропуск шага: continue

continue пропускает остаток текущего повторения, после чего for берёт следующее значение.

main.pyзначение 2 пропущено
for number in range(5):
    if number == 2:
        continue

    print(number)
Выводбез числа 2
0
1
3
4

§8Блок else у цикла

else после for выполняется, если перебор завершился без break. Если последовательность закончилась обычным образом, блок запускается даже после нуля повторений.

main.pyвсе значения обработаны
for number in range(3):
    print(number)
else:
    print("Цикл завершён без break")
Выводelse выполнился
0
1
2
Цикл завершён без break

§9Поиск делителя

Связка for / break / else удобна для поиска. Если делитель найден, break завершает цикл. Если не найден ни один, выполняется else.

main.pyпроверка числа 7
number = 7

for divisor in range(2, number):
    if number % divisor == 0:
        print("Не простое число")
        break
else:
    print("Простое число")
Выводделителей от 2 до 6 нет
Простое число

Этот вариант рассчитан на целые числа не меньше 2. Для меньших значений нужно добавить отдельную проверку.

§10Итерация и итерируемый объект

Итерация — одно выполнение тела цикла. Итерируемый объект — объект, из которого for может по очереди получать значения.

ОбъектЧто получает переменная цикла
строкаочередной символ
список или кортежочередной элемент
range()очередное целое число диапазона
словарьочередной ключ при обычном переборе

Как именно объекты отдают значения циклу, будет разобрано в отдельной теме об итераторах. Пока достаточно модели «for берёт следующий элемент».

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

Что написаноЧто произойдётКак правильно
for number in range(5)SyntaxError: нет двоеточияfor number in range(5):
тело цикла без отступаIndentationErrorдобавить отступ в четыре пробела
for letter in 123:TypeError: целое число нельзя перебиратьиспользовать строку "123" или range()
ожидать, что break пропустит только одно значениецикл полностью завершитсядля одного пропуска использовать continue
ожидать else после breakблок else будет пропущенпомнить: else выполняется без break
использовать имя i, когда элемент имеет ясный смыслкод труднее читатьвыбрать имя letter, number или student

§12Проверьте себя

Сколько раз выполнится тело для строки "Code"?

Четыре раза — по одному разу для символов C, o, d и e.

Чем for отличается от while?

for перебирает готовые значения, а while повторяет блок, пока условие истинно.

Когда выполнится else цикла for?

Когда перебор завершился без break.

§13Шпаргалка

Перебрать значенияfor item in sequence: action
Перебрать строкуfor letter in text:
Завершитьbreak
Пропустить шагcontinue

Итог главы

for получает значения из итерируемого объекта по одному. Переменная цикла хранит текущее значение, а тело выполняется для каждого элемента. break завершает перебор, continue пропускает один шаг, а else выполняется при завершении без break.

Глава 3.3 · Цикл for in · Справочник по Python Автор: Макаров Максим Николаевич