Цикл for в Python

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

Что такое цикл for

Цикл for в Python используется для перебора последовательностей (списков, кортежей, строк) и других итерируемых объектов. Перебор последовательности называется обходом. 

Синтаксис цикла

for значение in последовательность:
    Тело цикла for

Цикл продолжается до тех пор, пока мы не достигнем последнего элемента последовательности. Тело цикла for является отдельным блоком кода и отделяется отступом.

Блок-схема цикла 

Пример цикла

# Программа находит сумму элементов последовательности

# Список чисел
numbers = [6, 5, 3, 8, 4, 2, 5, 4, 11]

# Переменная, в которой хранится сумма
sum = 0

# Итерация цикла
for value in numbers:
    sum = sum+value

print("Сумма равна", sum)

Вывод:

 

Сумма равна 48 

Функция range()

С помощью функции range() мы можем сгенерировать последовательность чисел. range(10), к примеру, сгенерирует числа от 0 до 9 (всего 10 чисел).

Мы также можем определить начало, конец и размер шага —range(начало, конец, размер_шага). Если не указать шаг (размер_шага), то по умолчанию он будет равен 1.

Объект range в некотором смысле «ленивый». Когда мы вызываем этот объект, он не генерирует все числа, которые он «содержит». Но это и не итератор — он поддерживает операции in, len и __getitem__.

Эта функция не хранит все значения в памяти — это неэффективно. Для нее важны лишь начало, конец и размер шага — генерация следующего числа происходит на ходу.

Для вывода всех элементов следует воспользоваться функцией list().

Наглядный пример
print(range(10))
print(list(range(10)))
print(list(range(2, 8)))
print(list(range(2, 20, 3)))

Вывод: 

range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 3, 4, 5, 6, 7]
[2, 5, 8, 11, 14, 17]

Функцию range() можно использовать для перебора последовательности чисел в цикле for. Индексация реализуется при комбинации с функцией len(). Пример:

# Программа для итерации списка с использованием индексации

genre = ['поп', 'рок', 'джаз']

# проходимся по циклу, используя индекс i
for i in range(len(genre)):
	print("Мне нравится", genre[i])

Вывод:

Мне нравится поп
Мне нравится рок
Мне нравится джаз

Цикл for с блоком else

В цикле for может быть дополнительный блок else. Блок else выполняется, если элементы последовательности закончились.

Для остановки цикла for используется ключевое слово break. В этом случае выполнение цикла останавливается.

Следовательно, блок else выполняется только в том случае, если выполнение цикла не было прервано оператором break.

Наглядный пример
digits = [0, 1, 5]

for i in digits:
    print(i)
else:
    print("Элементов в списке не осталось.")

Вывод:

0
1
5
Элементов в списке не осталось.

В этом примере цикл for печатает элементы списка до тех пор, пока он не закончится. После завершения цикла выполняется блок else, который печатает сообщение Элементов в списке не осталось.

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

Пример

# Программа выводит на экран оценку студента
student_name = 'Артем'

marks = {'Роман': 90, 'Максим': 55, 'Артур': 77}

for student in marks:
    if student == student_name:
        print(marks[student])
        break
else:
    print('Студент не найден.')

Вывод: 

Студент не найден.
Проверьте себя
1. Какую последовательность чисел сгенерирует list(range(2, 20, 3))?
A[2, 5, 8, 11, 14, 17]
B[2, 3, 4, ..., 19]
C[3, 6, 9, 12, 15, 18]
D[2, 5, 8, 11, 14, 17, 20]
2. Почему объект range называют «ленивым»?
AПотому что он не хранит все значения в памяти, а генерирует следующее число на ходу
BПотому что он работает медленнее обычного списка
CПотому что он генерирует числа только после вызова len()
DПотому что он откладывает выполнение цикла до конца программы
3. В каком случае выполнится блок else у цикла for?
AТолько если цикл был прерван оператором break
BВсегда, сразу после последней итерации, при любых условиях
CЕсли элементы последовательности закончились и цикл не был прерван оператором break
DТолько если последовательность была пустой

Закрепите практикой

Задачи с автоматической проверкой — решайте прямо здесь, не уходя из учебника.