Шаг 27.
Основы языка Python.
Условные операторы и циклы. Функции range() и enumerate()

    На этом шаге мы рассмотрим назначение и примеры использования этих функций.

    До сих пор мы только выводили элементы последовательностей. Теперь попробуем умножить каждый элемент списка на 2:


Рис.1. Текст программы и результат выполнения

Архив с файлом можно взять здесь.

    Как видно из примера, список не изменился. Переменная i на каждой итерации цикла содержит лишь копию значения текущего элемента списка. Изменить таким способом элементы списка нельзя. Чтобы получить доступ к каждому элементу, можно, например, воспользоваться функцией range () для генерации индексов. Функция range () имеет следующий формат:

range ([<Начало>, ]<Конец>[, <Шаг>])

    Первый параметр задает начальное значение. Если параметр <Начало> не указан, то по умолчанию используется значение 0. Во втором параметре указывается конечное значение. Следует заметить, что это значение не входит в возвращаемые значения. Если параметр <Шаг> не указан, то используется значение 1. Функция возвращает диапазон - особый объект, поддерживающий итерационный протокол. С помощью диапазона внутри цикла for можно получить значение текущего элемента. В качестве примера умножим каждый элемент списка на 2 (рисунок 2).


Рис.2. Текст программы и результат выполнения

Архив с файлом можно взять здесь.

    В этом примере мы получаем количество элементов списка с помощью функции len () и передаем результат в функцию range (). В итоге функция range () возвращает диапазон значений от 0 до len (arr) - 1. На каждой итерации цикла через переменную i доступен текущий элемент из диапазона индексов. Чтобы получить доступ к элементу списка, указываем индекс внутри квадратных скобок. Умножаем каждый элемент списка на 2, а затем выводим результат с помощью функции print ().

    Рассмотрим несколько примеров использования функции range (). Выведем числа от 1 до 100:

for i in range (1, 101):   print (i)

    Можно не только увеличивать значение, но и уменьшать его. Выведем все числа от 100 до 1:

for i in range (100, 0, -1): print (i)

    Можно также изменять значение не только на единицу. Выведем все четные числа от 1 до 100:

for i in range (2, 101, 2): print (i)

    В Python 3 поведение функция range () возвращает диапазон. Чтобы получить список чисел, следует передать диапазон, возвращенный функцией range (), в функцию list () (рисунок 3).


Рис.3. Создание списка чисел на основе диапазона

    Диапазон поддерживает два полезных метода:

    Функция enumerate (<объект>[, start=0]) на каждой итерации цикла for возвращает кортеж из индекса и значения текущего элемента. С помощью необязательного параметра start можно задать начальное значение индекса. В качестве примера умножим на 2 каждый элемент списка, который содержит четное число (рисунок 4).


Рис.4. Пример использования функции enumerate (). Текст программы и результат выполнения

Архив с файлом можно взять здесь.

    Функция enumerate() не создает список, а возвращает итератор. С помощью функции next () можно обойти всю последовательность. Когда перебор будет закончен, возбуждается исключение StopIteration:

    Кстати, цикл for при работе активно использует итераторы, но делает это незаметно для нас.

    На следующем шаге мы рассмотрим цикл while.




Предыдущий шаг Содержание Следующий шаг