Цикл for и итерация по последовательностям
Цикл for и итерация по последовательностям
В предыдущем уроке вы познакомились с while — циклом, который работает «пока условие истинно». Часто задача другая: «пройти по каждому элементу последовательности». Для этого Python предоставляет цикл for — лаконичный и мощный инструмент перебора.
Синтаксис for
for переменная in последовательность:
# тело цикла
На каждой итерации переменная принимает очередное значение из последовательности. Цикл завершается, когда последовательность исчерпана.
Перебор строки
Строка — это последовательность символов. for перебирает их один за другим:
word = "Python"
for char in word:
print(char)
Вывод:
P
y
t
h
o
n
Перебор списка
Списки мы подробно изучим в модуле 5, но уже сейчас можно использовать for с ними:
fruits = ["яблоко", "банан", "вишня"]
for fruit in fruits:
print(f"Фрукт: {fruit}")
Вывод:
Фрукт: яблоко
Фрукт: банан
Фрукт: вишня
Использование переменной цикла
Переменная цикла (fruit, char) — это обычная переменная Python. Её можно использовать в теле цикла любым способом: в вычислениях, в условиях, в f-строках.
numbers = [3, 7, 1, 9, 4, 6]
total = 0
for n in numbers:
total += n
print(f"Сумма: {total}") # 30
Важно: имя переменной цикла — ваш выбор. for x in ..., for item in ..., for element in ... — все варианты работают. По соглашению используйте осмысленное имя, отражающее тип элементов.
Специальное имя _
Если значение элемента не нужно — используйте _ как имя переменной. Это соглашение «нам не важно это значение»:
for _ in [1, 2, 3, 4, 5]:
print("tick") # выведет 5 раз
for с функцией range()
Очень часто нужно выполнить что-то N раз или перебрать числа от A до B. Для этого используется функция range() — подробно разберём её в следующем уроке:
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
Сравнение for и while
for и while — два разных инструмента для похожей задачи. Выбор зависит от ситуации:
| Ситуация | Лучший выбор |
|---|---|
| Перебрать элементы последовательности | for |
| Выполнить N раз | for range(N) |
| Повторять пока выполняется условие | while |
| Неизвестное заранее число итераций | while |
Один и тот же код с for и while:
# for — лаконично:
for i in range(1, 6):
print(i)
# while — более громоздко:
i = 1
while i <= 5:
print(i)
i += 1
Правило: если знаете, что именно перебираете — используйте for. Если условие остановки неизвестно заранее — while.
enumerate: индекс + значение
Иногда при переборе нужен не только элемент, но и его порядковый номер. Функция enumerate() даёт оба:
fruits = ["яблоко", "банан", "вишня"]
for i, fruit in enumerate(fruits):
print(f"{i + 1}. {fruit}")
Вывод:
1. яблоко
2. банан
3. вишня
enumerate() возвращает пары (индекс, элемент). По умолчанию нумерация с 0; можно задать другое начало: enumerate(fruits, start=1).
Перебор строки с индексом
word = "Hello"
for i, char in enumerate(word):
print(f"word[{i}] = '{char}'")
Вывод:
word[0] = 'H'
word[1] = 'e'
word[2] = 'l'
word[3] = 'l'
word[4] = 'o'
Накопление через for
Типичный паттерн — собирать строку или число по ходу перебора:
words = ["Hello", "World", "Python"]
result = ""
for word in words:
result += word + " "
result = result.strip() # убрать trailing пробел
print(result) # Hello World Python
Проверь себя
Что выведет следующий код?
s = "hello"
count = 0
for char in s:
if char in "aeiou":
count += 1
print(count)
Строка "hello" содержит гласные e, o. Счётчик дойдёт до 2. Вывод: 2.
Итог
for переменная in последовательность:перебирает элементы по одному.- Работает со строками, списками и любыми итерируемыми объектами.
- Предпочтителен перед
while, когда перебираем конкретную последовательность. _как имя переменной — соглашение «значение не нужно».enumerate()даёт одновременно индекс и значение.- Для N итераций используйте
for i in range(N)— подробнее в следующем уроке.
В следующем уроке детально разберём range() — ключевую функцию для генерации числовых последовательностей в циклах.