Привет! Предлагаю изучить тему Цикл for в Python. На выбор два формата: видеолекция с преподавателем JavaRush университета или подробный текстовый разбор, который я подготовил специально для тебя.
Коротко: цикл
for в Python перебирает готовую последовательность, а не считает шаги по условию, как в C или Java. Пишется он так:
for переменная in объект:, а тело цикла идет ниже с отступом. Чтобы повторить действие заданное число раз, берут
range(): запись
for i in range(5) даст числа от 0 до 4. Перебирать при этом можно не только числа, но и список, строку, кортеж, множество или словарь.
Умный программист всегда найдет способ не делать работу дважды. Если он видит, что какая-то задача повторяется снова и снова, он автоматизирует процесс так, чтобы компьютер выполнил все сам. И главное - сделает это качественно с первого раза.
Именно для автоматизации повторяющихся задач и были созданы циклы. Допустим, тебе нужно показать на экране все числа от 0 до 99. Без использования циклов код выглядел бы так:
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
# И так далее
Представляешь? Целых 100 строчек одинакового кода! Это же кошмар. А теперь посмотри, как элегантно решается та же задача с помощью цикла:
for i in range(100):
print(i)
Всего 2 строки, и готово!
Кратко
for проходит по элементам последовательности, счетчик и условие выхода писать не нужно.
range(n) дает числа от 0 до n минус 1; range(start, stop, step) задает начало, конец и шаг, а отрицательный шаг разворачивает счет.
- Нужен индекс вместе с элементом это
enumerate(), нужно идти по двум спискам сразу это zip().
break выходит из цикла целиком, continue пропускает только текущую итерацию.
- У цикла есть необычный блок
else: он срабатывает, если цикл дошел до конца и ни разу не встретил break.
- Бесконечный цикл в Python делают через
while True, а не через for.
Что такое циклы for в Python?
Цикл for в Python это специальная конструкция в программировании, которая позволяет повторять один и тот же блок кода нужное количество раз. Вместо линейного выполнения программы сверху вниз, цикл заставляет код "крутиться" в одном месте.
Представь жизненную ситуацию: тебе нужно накапать 30 капель настойки в стакан. Обычный алгоритм действий:
- Взять стакан.
- Открыть флакон.
- Накапать 1-ю каплю.
- Накапать 2-ю каплю.
- И так далее.
- Накапать 30-ю каплю.
- Закрыть флакон.
- Выпить лекарство.
Но ведь можно описать это намного проще:
- Взять стакан.
- Открыть флакон.
- Накапать 30 капель.
- Закрыть флакон.
- Выпить лекарство.
В повседневной речи мы постоянно используем подобные "циклы": "пройди еще 15 шагов прямо", "сделай 3 подхода по 10 приседаний", "купи 7 разных продуктов и получишь скидку"... Примеров масса, принцип всегда один и тот же.
Вот и в Python цикл for служит для того, чтобы сделать код короче и понятнее.
Принцип работы цикла for в Python
В Python цикл for работает с итерируемыми объектами (списки, строки, кортежи, range и др.), а какие вообще бывают
типы данных, разобрано в отдельной статье:
for <переменная> in <итерируемый_объект>:
# Тело цикла
<действия>
Пример перебора цифр от 0 до 4 и вывод каждой в консоль:
for i in range(5):
print(i)
Вывод:
0
1
2
3
4
Если перевести данную запись на человеческий язык, получится следующее: "Для каждого числа i в диапазоне от 0 до 4 включительно выведи его значение в консоль."
Основные стадии работы цикла for можно изобразить следующей схемой:
![Блок-схема работы цикла на примере раскрашивания кружков: инициализация, проверка условия Circles меньше 10, тело цикла, увеличение счетчика и возврат к проверке, а при ложном условии выход]()
Функция range()
Функция
range() - основной инструмент для создания числовых последовательностей в циклах:
# range(stop) - от 0 до stop-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(start, stop) - от start до stop-1
for i in range(2, 7):
print(i) # 2, 3, 4, 5, 6
# range(start, stop, step) - от start до stop-1 с шагом step
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
Обратный цикл (от большего к меньшему)
for i in range(5, 0, -1):
print(i)
Вывод:
5
4
3
2
1
Цикл for с различными типами данных
Перебрать можно любой итерируемый объект, а не только список. Вот что чаще всего попадает в цикл и что при этом получает переменная:
| Что перебираем |
Что получает переменная |
Пример |
| список |
очередной элемент |
for x in [1, 2, 3] |
| строка |
очередной символ |
for ch in "Python" |
| кортеж |
очередной элемент |
for x in (1, 2, 3) |
| множество |
элемент, но порядок не гарантирован |
for x in {1, 2, 3} |
| словарь |
ключ |
for key in prices |
словарь через items() |
пару из ключа и значения |
for key, value in prices.items() |
range() |
число из диапазона |
for i in range(5) |
enumerate() |
пару из индекса и элемента |
for i, x in enumerate(fruits) |
zip() |
по одному элементу из каждой последовательности |
for a, b in zip(names, ages) |
Перебор списка
fruits = ["яблоко", "банан", "апельсин"]
for fruit in fruits:
print(fruit)
Вывод:
яблоко
банан
апельсин
Перебор строки
word = "Python"
for letter in word:
print(letter)
Вывод:
P
y
t
h
o
n
Перебор с индексами
Если нужны и элемент, и его индекс, используй
enumerate():
fruits = ["яблоко", "банан", "апельсин"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
Вывод:
0: яблоко
1: банан
2: апельсин
Вложенные циклы
В Python также можно создавать вложенные циклы. Количество итераций будет умножаться:
for i in range(3):
print(f"{i} | ", end="")
for j in range(5):
print(j, end=" ")
print() # переход на новую строку
Вывод:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
Работа с двумерными списками
Вложенные циклы идеально подходят для обхода двумерных структур:
matrix = [[0, 1, 2, 3, 4],
[1, 2, 3, 4, 5],
[2, 3, 4, 5, 6],
[3, 4, 5, 6, 7]]
for row in matrix:
for element in row:
print(element, end=" ")
print() # переход на новую строку
Или с индексами:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j], end=" ")
print()
Вывод:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
Досрочное завершение цикла
Оператор break
Для прерывания цикла используется
оператор break:
def find_first_position(string_list, element):
for i, item in enumerate(string_list):
if item == element:
print(f"Элемент найден на позиции: {i}")
break
else:
print("Элемент не найден")
# Пример использования
fruits = ["яблоко", "банан", "апельсин", "киви"]
find_first_position(fruits, "банан")
Вывод:
Элемент найден на позиции: 1
Обрати внимание:
else в этом примере относится к циклу, а не к
if. Он срабатывает, когда цикл дошел до конца и ни разу не встретил
break, и разберем мы его чуть ниже, в разделе про
for-else.
Оператор continue
Оператор
continue пропускает текущую итерацию и переходит к следующей:
for i in range(10):
if i % 2 == 0: # если число четное
continue # пропускаем его
print(i) # выводим только нечетные
Вывод:
1
3
5
7
9
Конструкция for-else
В Python у цикла
for есть уникальная особенность - блок
else, который выполняется, если цикл завершился естественным образом (не через
break):
def search_element(numbers, target):
for num in numbers:
if num == target:
print(f"Элемент {target} найден!")
break
else:
print(f"Элемент {target} не найден в списке")
# Примеры
numbers = [1, 3, 5, 7, 9]
search_element(numbers, 5) # Элемент 5 найден!
search_element(numbers, 4) # Элемент 4 не найден в списке
Полезные функции для работы с циклами
zip() - одновременный перебор нескольких последовательностей
names = ["Анна", "Борис", "Виктор"]
ages = [25, 30, 35]
cities = ["Токио", "Чикаго", "Рим"]
for name, age, city in zip(names, ages, cities):
print(f"{name}, {age} лет, живет в {city}")
Вывод:
Анна, 25 лет, живет в Токио
Борис, 30 лет, живет в Чикаго
Виктор, 35 лет, живет в Рим
reversed() - обратный перебор
numbers = [1, 2, 3, 4, 5]
for num in reversed(numbers):
print(num)
Вывод:
5
4
3
2
1
Бесконечный цикл
В Python бесконечный цикл обычно создают с помощью
while True, а не
for:
import itertools
# Бесконечный цикл с for (не рекомендуется)
for i in itertools.count():
print(i)
if i > 5:
break
Но помни, что в большинстве случаев бесконечный цикл это свидетельство логической ошибки. У такого цикла обязательно должно быть условие выхода.
Вопросы и ответы
Чем цикл for в Python отличается от for в других языках?
Тем, что это не счетчик, а перебор. В C или Java в заголовке цикла пишут начальное значение, условие и шаг, а в Python цикл просто идет по готовой последовательности и сам заканчивается, когда элементы кончились. Привычный счетчик при этом никуда не делся: его роль играет функция
range().
Как повторить действие ровно N раз?
Через
range(): запись
for i in range(10) выполнит тело цикла десять раз, а переменная
i пробежит значения от 0 до 9. Если сама переменная не нужна, по традиции пишут подчеркивание:
for _ in range(10).
Как перебрать словарь в цикле for?
Если написать
for key in prices, переменная получит ключи. Чтобы сразу иметь и ключ, и значение, берут метод
items():
for key, value in prices.items(). Для одних только значений есть
values().
Чем break отличается от continue?
break прерывает весь цикл: выполнение переходит к коду после него, оставшиеся элементы не обрабатываются.
continue прерывает только текущую итерацию и сразу переходит к следующему элементу, то есть цикл продолжает работу. Проще запомнить так: break это выход, continue это пропуск.
Что делает блок else у цикла for?
Он выполняется, когда цикл закончился сам, перебрав все элементы, и ни разу не был прерван через
break. Удобнее всего это для поиска: в цикле ищем элемент и выходим по
break, а в
else пишем, что искомое не нашлось. Если
break сработал, блок
else пропускается.
Как пройти по списку в обратном порядке?
Тремя способами. Функция
reversed(numbers) идет по элементам с конца. Обратный
range вида
range(len(numbers) - 1, -1, -1) дает индексы в обратном порядке. И срез
numbers[::-1] создает перевернутую копию списка. Первый вариант обычно самый читаемый и не копирует данные.
Читайте также:
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ