Python
Цикл for в Python
Цикл for в Python проходит по элементам объекта: списка, строки, словаря, диапазона range(), файла или другой последовательности. Это основной цикл для задач, где нужно взять каждый элемент и что-то с ним сделать
Главная идея простая: Python сам берет следующий элемент, кладет его во временную переменную и выполняет блок кода. Когда элементы заканчиваются, цикл завершается
По этой теме полезно отдельно посмотреть Составьте еженедельное расписание занятий, чтобы расширить контекст и сравнить подходы
По этой теме полезно отдельно посмотреть Аннотации типов для декораторов в Python, чтобы расширить контекст и сравнить подходы
Базовый пример со списком
names = ['Анна', 'Олег', 'Мария']
for name in names:
print(f'Привет, {name}')
Результат:
Привет, Анна
Привет, Олег
Привет, Мария
В строке for name in names переменная name по очереди получает значения из списка. Сначала это Анна, потом Олег, потом Мария
Название переменной можно выбрать любое, но лучше писать по смыслу. Если список называется products, переменная часто называется product. Если список называется users, переменная — user
Как читать цикл for
Читается почти как обычная фраза: для каждого имени в списке имен выполнить действие
products = ['ноутбук', 'мышь', 'клавиатура']
for product in products:
print(product)
Python не требует создавать счетчик и вручную увеличивать индекс. В этом отличие от многих примеров на других языках. Если вам нужен сам элемент, берите for item in items, а не range(len(items))
Цикл for по строке
Строка тоже является последовательностью, поэтому по ней можно пройти циклом
word = 'python'
for letter in word:
print(letter)
Результат:
p
y
t
h
o
n
Такой прием полезен для проверки символов, подсчета букв, поиска цифр в строке или простой обработки текста
Пример: посчитать цифры в строке
text = 'Заказ 204 готов'
digits = 0
for char in text:
if char.isdigit():
digits += 1
print(digits)
Результат:
3
Цикл for со словарем
Если пройтись по словарю напрямую, Python выдаст ключи
user = {
'name': 'Анна',
'city': 'Казань',
'role': 'admin'
}
for key in user:
print(key)
Результат:
name
city
role
Чтобы получить ключ и значение вместе, используйте .items()
for key, value in user.items():
print(f'{key}: {value}')
Результат:
name: Анна
city: Казань
role: admin
Такой вариант часто нужен для вывода настроек, параметров формы, карточки пользователя или простого отчета
Цикл for и range
range() нужен, когда важны числа: повторить действие несколько раз, вывести диапазон, сделать счетчик
for number in range(1, 6):
print(number)
Результат:
1
2
3
4
5
Правая граница не входит в диапазон, поэтому range(1, 6) дает числа от 1 до 5
Если нужно повторить действие три раза, можно написать так:
for attempt in range(3):
print(f'Попытка {attempt + 1}')
Результат:
Попытка 1
Попытка 2
Попытка 3
Индекс через enumerate
Когда нужен и номер, и сам элемент, используйте enumerate()
tasks = ['написать код', 'проверить', 'опубликовать']
for index, task in enumerate(tasks, start=1):
print(f'{index}. {task}')
Результат:
1. написать код
2. проверить
3. опубликовать
Это читается лучше, чем ручной индекс через range(len(tasks))
Менее удачный вариант:
for index in range(len(tasks)):
print(f'{index + 1}. {tasks[index]}')
Он работает, но сложнее: нужно следить за индексом и обращаться к списку вручную. Для обычной нумерации enumerate() проще
Собрать новый список через for
Цикл часто используют не только для вывода, но и для подготовки новых данных
prices = [800, 1200, 500, 2500]
expensive = []
for price in prices:
if price > 1000:
expensive.append(price)
print(expensive)
Результат:
[1200, 2500]
Здесь цикл проходит по всем ценам, проверяет условие и добавляет подходящие значения в новый список
Еще пример: собрать имена активных пользователей
users = [
{'name': 'Анна', 'active': True},
{'name': 'Олег', 'active': False},
{'name': 'Мария', 'active': True}
]
active_names = []
for user in users:
if user['active']:
active_names.append(user['name'])
print(active_names)
Результат:
['Анна', 'Мария']
Когда нужен for, а когда while
for выбирают, когда есть набор элементов и нужно пройти по каждому
while выбирают, когда повторение зависит от условия: пользователь не ввел правильные данные, игра не закончена, команда выхода не получена
Пример для for: вывести все товары в корзине
cart = ['книга', 'ручка', 'тетрадь']
for item in cart:
print(item)
Пример для while: спрашивать команду до выхода
command = ''
while command != 'exit':
command = input('Команда: ')
Если вы можете сказать «для каждого элемента», почти всегда нужен for
Частые ошибки
Первая ошибка — искать индекс там, где нужен сам элемент
names = ['Анна', 'Олег']
for index in range(len(names)):
print(names[index])
Лучше:
for name in names:
print(name)
Вторая ошибка — менять список во время обхода
numbers = [1, 2, 3, 4]
for number in numbers:
if number % 2 == 0:
numbers.remove(number)
Такой код может пропускать элементы и вести себя неожиданно. Чаще безопаснее собрать новый список
numbers = [1, 2, 3, 4]
odd_numbers = []
for number in numbers:
if number % 2 != 0:
odd_numbers.append(number)
Третья ошибка — забыть про пустой список. Если список пустой, тело цикла не выполнится ни разу
items = []
for item in items:
print(item)
print('Готово')
Это нормально. Просто не ждите, что внутри цикла что-то произойдет без данных
Практические задачи
Выведите все имена из списка пользователей
Посчитайте сумму чисел в списке без функции sum()
Выведите только товары дороже 1000
Пройдитесь по строке и посчитайте количество гласных
Выведите словарь настроек в формате ключ: значение
Пронумеруйте список задач через enumerate()
for в Python нужен для обхода данных. Он берет элементы по одному и выполняет блок кода для каждого элемента. Чаще всего вы будете использовать его со списками, строками, словарями, range() и enumerate()
Если нужен сам элемент, пишите for item in items. Если нужен номер, добавляйте enumerate(). Если нужно повторить действие по числам, используйте range(). Если повторение зависит не от набора данных, а от условия, смотрите в сторону while