Курс 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. Функциональное программирование.
  2. Метод getitem для доступа к элементам последовательности
  3. Создание комплексных чисел
  4. Метод __iand__ для пользовательских классов
  5. Установка максимального количества цифр
  6. Генераторы в Python
  7. Подсчет частоты элементов с Counter
  8. ChainMap.new_child() — добавление нового словаря
  9. Управление сессиями в Python
  10. Копирование списков в Python
  11. Переменные в Python
  12. Разрешение имен в Python
  13. Визуализация пропусков данных
  14. Работа с утверждениями в Python
  15. Декоратор для группы пользователей в Django
  16. Метод count в Python: почему count(», ») возвращает 4?
  17. Ветвление выражения в Python
  18. Python Calendar Usage
  19. Удаление дубликатов из списка
  20. Создание класса очереди
  21. Удаление символов новой строки в Python.
  22. Игра «Камень, ножницы, бумага» — Python
  23. Поиск простых чисел
  24. Конвертация коллекций в Python
  25. Основные операции с Numpy
  26. Применение функции к списку
  27. Работа со временем в Python
  28. Создание словарей в Python
  29. Оператор «моржа» (Walrus Operator)
  30. Beautiful Soup — извлечение данных из HTML
  31. Округление в Python
  32. Создание коллекций из выражения-генератора
  33. Регулярные выражения: метод match
  34. Добавление элементов в список
  35. Преобразование данных в Python
  36. Экспорт данных с помощью writefile
  37. Ошибка NotImplemented в Python
  38. Получение размера объекта с sys.getsizeof()
  39. Улучшение читаемости кода в Python
  40. Цикл for в Python
  41. Избегайте двойного подчеркивания
  42. Работа со строками в Python
  43. Подсчет часто встречающихся элементов
  44. Работа с timedelta в Python
  45. Функции высшего порядка в Python

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