На этом шаге мы рассмотрим диапазоны.
Диапазоны у как следует из самого их названия, - это диапазоны целых чисел с заданными начальным и конечным значением и шагом (промежутком между соседними числами). Как и списки, кортежи и множества, диапазоны представляют собой последовательности и, подобно кортежам, являются неизменяемыми.
Важнейшим преимуществом диапазонов перед другими видами последовательностей является их компактность - вне зависимости от количества входящих в него элементов-чисел, диапазон всегда отнимает один и тот же объем оперативной памяти. Однако в диапазон могут входить лишь последовательно стоящие друг за другом числа - сформировать диапазон на основе произвольного набора чисел или данных другого типа, даже чисел с плавающей точкой, невозможно.
Диапазоны чаще всего используются для проверки вхождения значения в какой-либо интервал и для организации циклов.
Для создания диапазона применяется функция range ():
range([<Начало>, ] <Конец> [, <Шаг>] )
Первый параметр задает начальное значение - если он не указан, используется значение 0. Во втором параметре указывается конечное значение. Следует заметить, что это значение не входит в возвращаемый диапазон. Если параметр <Шаг> не указан, то используется значение 1. Примеры:
>>> r = range(1, 10) >>> for i in r: print(i, end=" ") 1 2 3 4 5 6 7 8 9 >>> r = range(10, 110, 10) >>> for i in r: print(i, end=" ") 10 20 30 40 50 60 70 80 90 100 >>> r = range(10, 1, -1) >>> for i in r: print(i, end=" ") 10 9 8 7 6 5 4 3 2
Преобразовать диапазон в список, кортеж, обычное или неизменяемое множество можно с помощью функций list (), tuple (), set () или frozenset () соответственно:
>>> list(range(1, 10)) # Преобразуем в список [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> tuple(range(1, 10)) # Преобразуем в кортеж (1, 2, 3, 4, 5, 6, 7, 8, 9) >>> set(range(1, 10)) # Преобразуем в множество {1, 2, 3, 4, 5, 6, 7, 8, 9}
Диапазоны поддерживают доступ к элементу по индексу, получение среза (в результате возвращается также диапазон), проверку на вхождение и невхождение, функции len(), min(), max(), методы index() и count(). Примеры:
>>> r = range(1, 10) >>> r[2], r[-1] (3, 9) >>> r[2:4] range(3, 5) >>> 2 in r, 12 in r (True, False) >>> 3 not in r, 13 not in r (False, True) >>> len(r), min(r), max(r) (9, 1, 9) >>> r.index(4), r.count(4) (3, 1)
В Python 3.3 появилась поддержка операторов, позволяющих сравнить два диапазона:
>>> range(1, 10) == range(1, 10, 1) True >>> range(1, 10, 2) == range(1, 11, 2) True >>> range(1, 10, 2) == range(1, 12, 2) False
>>> range(1, 10, 2) != range(1, 12, 2) True >>> range(1, 10) != range(1, 10, 1) False
А в Python 3.4 диапазоны стали поддерживать свойства start, stop и step, возвращающие, соответственно, начальную, конечную границы диапазона и его шаг:
>>> r = range(1, 10) >>> r.start, r.stop, r.step (1, 10, 1)
Со следующего шага мы начнем рассматривать модуль itertools.