Что такое диапазонpython-70

1. Основное определение

Диапазон (range) — это встроенный тип в Python, представляющий неизменяемую (immutable) последовательность чисел. Это не список, а специальный объект, который генерирует числа "на лету" (лениво), что делает его очень эффективным по памяти.

numbers = range(5)  # Создаем диапазон от 0 до 4
print(numbers)      # range(0, 5)

2. Создание диапазона

2.1. Основные формы конструктора range

range(stop)            # от 0 до stop-1 с шагом 1
range(start, stop)     # от start до stop-1 с шагом 1
range(start, stop, step)  # от start до stop-1 с заданным шагом

2.2. Примеры создания

# Простой диапазон
r1 = range(5)          # 0, 1, 2, 3, 4

# С указанием начала
r2 = range(2, 6)       # 2, 3, 4, 5

# С шагом
r3 = range(0, 10, 2)   # 0, 2, 4, 6, 8

# Отрицательный шаг
r4 = range(5, 0, -1)   # 5, 4, 3, 2, 1

3. Характеристики диапазона

3.1. Неизменяемость

Диапазон нельзя изменить после создания:

r = range(3)
r[0] = 10  # TypeError: 'range' object does not support item assignment

3.2. Эффективность памяти

Диапазон не хранит все числа в памяти, а вычисляет их по необходимости:

large_range = range(1_000_000)
print(sys.getsizeof(large_range))  # Всего 48 байт (не зависит от размера)

3.3. Ленивые вычисления

Числа генерируются только при итерации или явном запросе:

for i in range(3):
    print(i)  # Числа создаются в момент итерации

4. Использование диапазонов

4.1. В циклах for

Самое распространенное применение:

for i in range(3):
    print(f"Итерация {i}")

4.2. Создание списков/кортежей

Явное преобразование в последовательность:

numbers = list(range(5))   # [0, 1, 2, 3, 4]

4.3. Индексация и срезы

Диапазоны поддерживают операции индексирования:

r = range(10, 20)
print(r[0])      # 10
print(r[-1])     # 19
print(r[2:5])    # range(12, 15)

5. Методы и атрибуты

5.1. Основные атрибуты

r = range(2, 10, 2)
print(r.start)   # 2 (начальное значение)
print(r.stop)    # 10 (конечное значение, не включается)
print(r.step)    # 2 (шаг)

5.2. Проверка вхождения

5 in range(10)   # True
15 in range(10)  # False

6. Особенности и ограничения

6.1. Только целые числа

Диапазон работает только с целыми числами:

range(1.5, 5.5)  # TypeError: 'float' object cannot be interpreted as an integer

6.2. Отрицательные значения

Можно использовать отрицательные значения:

range(-5, 0)     # -5, -4, -3, -2, -1

6.3. Бесконечные диапазоны

Не поддерживаются - нужно указывать конечное значение.

7. Альтернативы

7.1. numpy.arange

Для работы с дробными числами:

import numpy as np
np.arange(0, 1, 0.1)  # [0.0, 0.1, 0.2, ..., 0.9]

7.2. Генераторы

Для сложных последовательностей:

(i**2 for i in range(5))  # Генератор квадратов чисел

Резюмируем

  1. range — это эффективный способ работы с последовательностями целых чисел
  2. Основные преимущества:
    • Экономия памяти (не хранит всю последовательность)
    • Быстрая инициализация
    • Поддержка индексации и итерации
  3. Основное применение:
    • Циклы for
    • Создание последовательностей чисел
    • Индексация и срезы
  4. Ограничения:
    • Только для целых чисел
    • Неизменяемый тип
    • Не поддерживает дробные шаги

Диапазон — это оптимальный выбор при работе с последовательностями целых чисел в Python.