Перейти к основному содержимому
Модуль 2 · Урок 1 из 45/36 в курсе~10 min
Уроки модуля (1/4)

для петель и диапазона

Цикл for в Python используется для перебора последовательности элементов: список, строка, диапазон, словарь… все, что можно повторять.

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

Шаблон всегда один и тот же: for <variable> in <iterable>:, за которым следует блок с отступом, который будет выполняться один раз для каждого элемента.

range(...): генерация целочисленных интервалов

range создает ленивую последовательность целых чисел. Три формы:

Python
range(5)         # 0, 1, 2, 3, 4
range(2, 6)      # 2, 3, 4, 5
range(0, 10, 2)  # 0, 2, 4, 6, 8     (step)
range(5, 0, -1)  # 5, 4, 3, 2, 1     (negative step)

range является эксклюзивным на правом конце, как slice. Это ленивый объект: он не выделяет память для всех чисел, а создает их по одному.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

Итерация с индексом: enumerate

Если вам нужен элемент и его индекс вместе, используйте enumerate:

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate создает (index, value) пары, которые мы присваиваем непосредственно двум переменные посредством распаковки кортежа (мы увидим это в модуле, посвященном структуры данных).

Параллельная итерация двух последовательностей: zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip останавливается на самой короткой последовательности.

range() и лень Python

В Python функция range() не выделяет фактический список в памяти: она возвращает ленивый генератор, который выдает числа по одному по запросу (например, в цикле for). Это позволяет перебирать миллионы целых чисел без раздувания оперативной памяти. Чтобы проверить значения диапазона в виде списка, вы можете явно привести его с помощью list(range(5)).

Попробуйте сами

Упражнение#python.m2.l1.e1
Попыток: 0Загрузка…

Вычислите сумму чисел от 1 до 100 (включительно), используя цикл for over range(...), присвойте ее значению `total` и вычислите.

Загрузка редактора…
Показать подсказку

range(1, 101) генерирует 1, 2,..., 100 (исключая справа).

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#python.m2.l1.e2
Попыток: 0Загрузка…

Учитывая список `words = ['uno', 'due', 'tre']`, создайте список `пар` строк, таких как '0:uno', '1:due', '2:tre', используя enumerate. Оцените «пары».

Загрузка редактора…
Показать подсказку

enumerate(words) возвращает (индекс, значение) на каждой итерации.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#python.m2.l1.e3
Попыток: 0Загрузка…

Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.

Загрузка редактора…
Показать подсказку

Используйте range(2, 21, 2) для перебора только четных целых чисел от 2 до 20.

Решение доступно после 3 попыток