Курс Python → Функции range() в Python

Привет! Если ты только начинаешь свой путь в Python или просто хочешь освежить знания, то тема `range()` — это то, что нужно. Короче, `range()` в Python — это такая хитрая штука, которая помогает генерировать последовательности чисел. Ну, типа, чтобы не писать вручную 0, 1, 2, 3, 4… Особенно удобно это, когда нужно что-то повторять определенное количество раз, например, в циклах `for`. Главная фишка `range()` в том, что она не создает огромный список чисел сразу, а возвращает такой специальный объект — `range object`. Это офигеть как экономит память, особенно когда речь идет о реально больших числах. Так что, если хочешь писать эффективный код, `range` — твой друг.

Вот почему `range` так важна:

  • Она помогает генерировать числа для циклов, не перегружая память.
  • Работает как обещание дать тебе числа, когда они понадобятся.
  • Это основа для многих операций, связанных с последовательностями.

Запомни, `range object` — это не список, это типа инструкция, как получить числа. Это и есть та самая оптимизация памяти, о которой все говорят.

Три Способа Использовать Python range

Функция `range()` в Python — это такая универсальная штука, которую можно вызывать тремя основными способами. Каждый способ дает немного разный результат, и понимание этого поможет тебе писать код точнее. Так, первый способ, самый простой: `range(stop)`. Здесь ты указываешь только одно число, которое будет обозначать конец последовательности. Python начнет считать с нуля (это по умолчанию) и остановится перед числом, которое ты указал. Например, `range(5)` выдаст тебе 0, 1, 2, 3, 4. Вот тебе и вся магия. Второе, что можно сделать, это `range(start, stop)`. Тут уже два числа: первое — это где начать считать, а второе — где закончить (опять же, не включая его). Если написать `range(2, 7)`, получишь 2, 3, 4, 5, 6. Удобно, правда? Ну и третий вариант, самый полный — `range(start, stop, step)`. Тут ты говоришь, где начать, где закончить, и еще какой шаг между числами использовать. Например, `range(1, 10, 2)` даст тебе 1, 3, 5, 7, 9. Если шаг не указать, он будет равен единице. А если шаг отрицательный, то последовательность будет идти в обратном порядке. Круто, что `stop` всегда исключается — это такая особенность, которую нужно просто запомнить.

Основные комбинации:

  • range(stop): Начинает с 0, идет до stop-1.
  • range(start, stop): Начинает с start, идет до stop-1.
  • range(start, stop, step): Начинает с start, идет до stop-1 с шагом step.

Параметры `start` и `step` имеют значения по умолчанию: `start` — 0, `step` — 1. Так что, если не хочешь их менять, просто не указывай. Понимаешь, да? Это просто для того, чтобы тебе было легче. Главное — помнить, что `stop` никогда не входит в итоговую последовательность. Вот так вот.

Практические Примеры Python range

Ну что, теперь, когда мы разобрались, как `range()` работает, давай посмотрим, как ее реально использовать. Самое очевидное — это, конечно, циклы `for`. Представь, тебе нужно вывести на экран каждую букву слова «привет» пять раз. Можно было бы написать пять циклов, но зачем? С `range()` это просто: `for _ in range(5): print(«привет»)`. Вот и все. А еще, если нужно получить список чисел, например, для дальнейшей обработки, можно легко преобразовать `range` в список, написав `my_list = list(range(10))`. Получится список от 0 до 9. Это прям реально удобно, когда надо иметь дело с индексами. Например, если у тебя есть список `items` и ты хочешь получить его длину и пройтись по каждому элементу, зная его индекс, то `for i in range(len(items)): print(f»Элемент {i}: {items[i]}»)`. И никаких проблем!

Бывает, что нужно идти в обратном порядке. Тут тоже `range()` спасает. Хочешь вывести числа от 10 до 1? Пиши `range(10, 0, -1)`. И вуаля! Получишь 10, 9, 8… до 1. Работа с большими диапазонами? `range()` справится. Она же не создает весь список сразу, помнишь? Поэтому даже миллион чисел — не проблема. Но вот с `float` (дробными числами) `range()` работать не умеет. Python говорит: «Эй, я только целые числа понимаю!». Если тебе нужны дробные последовательности, тогда тебе в другую сторону — к библиотеке `numpy` и функции `numpy.arange()`. Она как раз для этого и создана. Так что, если вдруг встретишь `range` с отрицательными числами, например, `range(-5, 0)`, то получишь -5, -4, -3, -2, -1. Все логично, главное — понимать, как `start`, `stop` и `step` работают вместе. Вот такая вот штука, универсальная и полезная.

Операции с Объектом range

С самим объектом `range`, который возвращает функция, можно делать всякие интересные штуки, прямо как с обычным списком, но с некоторыми особенностями. Например, ты можешь узнать, есть ли в твоем диапазоне какое-то число. Просто пишешь `if 5 in range(10):`. И Python тебе ответит — да, есть. Или можно проверить, сколько всего чисел в твоем диапазоне, с помощью `len(range(20))`. Это будет 20. Прикольно, да? Еще можно обращаться к конкретному элементу по индексу, типа `range(100)[50]`, и получишь 50. А вот со срезами (`slicing`) — тут своя история. Если ты возьмешь срез от `range`, например, `range(10)[2:7]`, то получишь не список, а снова другой объект `range`. Это сделано для того, чтобы сохранить эффективность памяти. Так что, если тебе нужен именно список, придется его явно преобразовать, написав `list(range(10)[2:7])`. Есть и методы, типа `index()`, чтобы найти позицию элемента, но они работают не так, как в списках, потому что `range` — это не список, а генератор.

Основные операции:

  • Проверка на вхождение: element in range_object.
  • Получение длины: len(range_object).
  • Доступ по индексу: range_object[index].
  • Срезы: range_object[start:stop:step] (возвращает новый range объект).

Ну и конечно, можно узнать минимальное и максимальное число в диапазоне, используя `min()` и `max()`. В общем, `range object` — это такой умный инструмент, который ведет себя предсказуемо и при этом экономит ресурсы. Главное — знать его правила игры.

Python 2 vs Python 3 range

Знаешь, раньше, в Python 2, дела обстояли немного иначе. Там была функция `range()`, которая сразу создавала целый список чисел. Если список был большой, ну, типа миллион элементов, то вся эта память сразу и занималась. Это было удобно, но не всегда эффективно. Поэтому в Python 2 придумали другую функцию — `xrange()`. Она работала похоже на наш современный `range()`: возвращала такой итератор, который выдавал числа по мере необходимости, экономя память. А теперь, в Python 3, всё стало проще и лучше! Функция `range()` в Python 3 ведет себя именно так, как раньше вела себя `xrange()` в Python 2. То есть, она возвращает `range object`, который очень экономный по памяти. А `xrange()` просто убрали. Так что, если ты работаешь с современным Python, можешь смело использовать `range()`, зная, что он умный и не будет тебе память забивать ненужными списками. Это реально крутое улучшение, которое делает код более производительным.

Частые Ошибки и Советы по Python range

Бывает, что новички сталкиваются с `range()`, и тут возникают всякие приколы. Одна из самых частых ошибок — это недопонимание параметра `stop`. Люди думают, что он включается, а он, как назло, исключается. Типа, `range(5)` — это 0, 1, 2, 3, 4. И когда им нужен, например, список от 0 до 5, они пишут `range(5)` и потом удивляются, почему пятерки нет. Решение? Просто добавь единицу к своему конечному значению: `range(stop + 1)`. Вот и всё, магия! Еще одна ошибка — попытка использовать `float` (дробные числа) в `range()`. Python на это ругается: «Я же говорил, только целые!». Как уже упоминали, для дробных чисел есть `numpy.arange`. Также, если вдруг решишь поставить `step=0`, Python скажет «Не-е-ет!» и выдаст `ValueError`. Ну, логично же, делить на ноль — это не очень хорошая идея. А с отрицательным шагом тоже можно ошибиться, если неправильно указать `start` и `stop`. Например, `range(5, 0, -1)` сработает, а вот `range(0, 5, -1)` — нет, потому что ты пытаешься идти в обратном направлении, но начинаешь с меньшего числа. Пара советов: если хочешь включить конечное значение, как я уже говорил, просто добавь единицу. И помни, что `range()` — это твой друг по экономии памяти. Не превращай его в гигантский список без необходимости.

Вот типичные подводные камни:

  • Забыли, что `stop` не включается.
  • Пытались использовать дробные числа.
  • Ставили `step=0`, что приводит к ошибке.

Всегда проверяй свои `start`, `stop` и `step`, особенно когда используешь отрицательные значения. Это спасет тебя от кучи головной боли.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Подсказки типов в Python
  2. Работа с WindowsPath()
  3. Flask — веб-фреймворк Python
  4. inspect в Python: анализ кода
  5. Очистка данных в Python
  6. Просмотр внешних файлов в %pycat
  7. Возведение в квадрат с помощью itertools
  8. Экспорт внешнего файла с помощью writefile
  9. Преобразование данных в Python
  10. Работа с срезами в Numpy
  11. Работа с коллекциями Python
  12. Преобразование строк в числа в Python
  13. Оператор объединения словарей
  14. Игра «Виселица» на Python
  15. Конвертация изображений в PDF
  16. Работа с изменяемыми коллекциями
  17. Обработка аргументов Python
  18. Функции map, filter, reduce
  19. Получение текущей даты и времени с помощью datetime
  20. Участие в LP стейкинге Waves
  21. Реверс строки и списка в Python.
  22. Библиотека sh: использование команд bash в Python
  23. Подсчет элементов с помощью Counter
  24. Открытие и запись файлов
  25. Создание словаря через dict comprehension
  26. Форматирование строк с f-строками
  27. Пропуск начальных строк с помощью dropwhile()
  28. Создание функций высшего порядка
  29. Навыки Python: строки, типы данных
  30. Область видимости переменных
  31. Создание спинбокса в tkinter
  32. Методы Python для работы с данными
  33. Исправление ошибки NameError
  34. CLI-инструмент howdoi
  35. Форматирование чисел в Python
  36. Создание и обучение модели с Keras
  37. Python enumerate() для работы с индексами
  38. Генераторы данных
  39. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  40. Проверка однородности элементов списка
  41. Символ подчеркивания в Python
  42. Автоматизация скриптов на AWS Lightsail.
  43. Добавление цвета в консоли
  44. Парсинг статей с Newspaper3k
  45. JSON в Python: модуль, dump, dumps, load
  46. Принципы программирования

Marketello читают маркетологи из крутых компаний