Функция range в Python

Подскажите, пожалуйста, как списки связаны с функцией range? Неясно написанное:"По умолчанию функция range создает последовательность чисел, которая увеличивается на 1 для каждого последующего числа в списке" (см. скрин). И на втором скриншоте смутила запись "второй аргумент (10) — это конечный предел списка. "
Ответы (1 шт):
Предисловие:
Учитель ученику: «Напиши все числа от 1 до 100!»
- Никакой труд для учителя произнести это — он употребил только 2 числа,
- но большой труд для ученика — он должен написать 100 чисел.
Чтобы понят смысл существования объектов типа range и что это за объект, пусть нам нужен огромный список всех четных чисел от 10 до 10 миллионов.
Да, вы можете эго задать как
lst = [10, 12, 14, 16, 18, 20, ..., 10_000_000]
но вместо трех точек вам придется написать всех почти 5 миллионов четных чисел вручную.
range(10, 10_000_001, 2)намного короче.range(10, 10_000_001, 2)не список, он не занимает в памяти почти 5 миллионов ячеек (см. дальше).range(10, 10_000_001, 2)только рецепт, как получить одно единственное число — сначала первое (10), затем второе (12) за тем третье (14), и т.д., опять экономя памятью.range(10, 10_000_001, 2)знает, когда уже не выдавать дальнейшее число (после числа
10 миллионов, т.е. перед достижением предела).
Вы бы могли в качестве предела использовать даже число10_000_002и ничего бы не изменилось.
Ну а теперь возникает вопрос — как заставить объект типа range() чтобы эго рецепт начал работать, т.е. постепенно выдавать дальнейшее и дальнейшее число?
Использовать его как параметр стандартной функции (конструктора)
list()илиtuple().
Тогда он (объект типаrange) с огромной скоростью сделает за вас то, что бы вы должна была сделать вручную, как я намекнул в начале этого ответа:lst = list(range(10, 10_000_001, 2)) # [10, 12, ..., 10_000_000]или
tpl = tuple(range(10, 10_000_001, 2)) # (10, 12, ..., 10_000_000)Но для такого огромного количества чисел это неразумно — таким образом бы вы потеряли главное преимущество объекта типа
rangе, т.е. экономностью памятью.Применить его в цикле
for:for i in range(10, 10_000_001, 2):В памяти будет всегда только одно число — текущее значение переменной
i.