Справочник по Python · модуль 3 · списки и циклы
Глава 3.3
Цикл for in:
перебор значений
for по очереди получает значения из строки, списка, диапазона или другой последовательности и выполняет один блок для каждого значения.
- Категория
- Циклы и перебор
- Уровень
- Начальный
- Связанные темы
- Строки, списки, range()
- Зачем это знать
- Обрабатывать элементы по одному без повторения кода
§1Что делает for
for используют, когда нужно пройти по готовому набору значений. На каждом повторении цикл берёт следующее значение, помещает его в переменную и выполняет тело.
for переменная in последовательность: тело_цикла
После последовательности ставится двоеточие. Тело цикла записывается с отступом в четыре пробела.
§2Переменная цикла
for number in [1, 2, 3, 4, 5]: print(number)
1 2 3 4 5
numberполучает первое значение1, затем выполняетсяprint().- Переменная получает
2, и тело выполняется снова. - Так продолжается до последнего значения
5. - Когда значения закончились, цикл завершается.
Название переменной выбирает программист. Лучше называть её по смыслу одного элемента: number, letter, name.
§3Перебор строки
Строку можно перебирать посимвольно. На каждом повторении переменная получает один символ.
for letter in "Python": print(letter)
P y t h o n
§4Перебор списка
Список хранит несколько значений в квадратных скобках. Подробно списки разбираются в модуле о коллекциях, но цикл работает с ними по тому же принципу.
numbers = [10, 20, 30] for number in numbers: print(number)
10 20 30
§5Числа через range()
range() создаёт диапазон целых чисел, который удобно перебирать циклом for.
for number in range(5): print(number)
0 1 2 3 4
Следующая глава отдельно разбирает начало, границу и шаг range().
§6Досрочный выход: break
break немедленно завершает ближайший цикл. Значения, которые остались в последовательности, уже не обрабатываются.
for number in range(10): if number == 5: break print(number)
0 1 2 3 4
§7Пропуск шага: continue
continue пропускает остаток текущего повторения, после чего for берёт следующее значение.
for number in range(5): if number == 2: continue print(number)
0 1 3 4
§8Блок else у цикла
else после for выполняется, если перебор завершился без break. Если последовательность закончилась обычным образом, блок запускается даже после нуля повторений.
for number in range(3): print(number) else: print("Цикл завершён без break")
0 1 2 Цикл завершён без break
§9Поиск делителя
Связка for / break / else удобна для поиска. Если делитель найден, break завершает цикл. Если не найден ни один, выполняется else.
number = 7 for divisor in range(2, number): if number % divisor == 0: print("Не простое число") break else: print("Простое число")
Простое число
Этот вариант рассчитан на целые числа не меньше 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: actionfor letter in text:breakcontinueИтог главы
for получает значения из итерируемого объекта по одному. Переменная цикла хранит текущее значение, а тело выполняется для каждого элемента. break завершает перебор, continue пропускает один шаг, а else выполняется при завершении без break.