Использование range для создания списков в языке Python
Создание списка с помощью range
Функция range() в Python предназначена для генерации последовательности целых чисел. В Python 3 range возвращает специальный объект, который не является списком, но легко преобразуется в список с помощью list(). Это основной инструмент для создания числовых последовательностей.
Основной способ:
numbers = list(range(5))
print(numbers)Python пустой list (создание пустого списка в python)
[0, 1, 2, 3, 4]
Python list range (создание списка с помощью range в python)
Пример создает список из пяти чисел от 0 до 4. Передача аргумента 5 в range означает, что последовательность включает значения от 0 до 5-1.
Как создать последовательность от 0 до N 1?
Используется range(stop). Единственный аргумент задает конечную границу, не включая её.
lst = list(range(10))
print(lst)List 1 1 2 2 python (генерация списка с повторяющимися элементами)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python array 1 (массив с единицами в python)
Как получить список чисел в заданном интервале?
Передаются два аргумента: range(start, stop). Первый определяет начальное значение, второй - границу.
lst = list(range(5, 12))
print(lst)
[5, 6, 7, 8, 9, 10, 11]
Как задать шаг приращения?
Третий аргумент step определяет разницу между соседними числами.
lst = list(range(0, 20, 3))
print(lst)
[0, 3, 6, 9, 12, 15, 18]
Как получить убывающую последовательность?
Отрицательное значение step создает обратный порядок. Важно, чтобы start было больше stop.
lst = list(range(10, 0, -2))
print(lst)
[10, 8, 6, 4, 2]
Что произойдет при равных start и stop?
Результатом будет пустой список, так как диапазон не содержит чисел.
lst = list(range(5, 5))
print(lst)
[]
Как создать список, изменяя значения из range?
Списковое включение (list comprehension) позволяет трансформировать каждый элемент.
lst = [x * 2 for x in range(5)]
print(lst)
[0, 2, 4, 6, 8]
Как использовать range в цикле без создания списка?
Объект range является итерируемым, можно применять в for напрямую.
for i in range(3):
print(i, end=' ')
0 1 2
Как получить кортеж или множество из range?
Функции tuple() и set() тоже принимают range.
tup = tuple(range(4))
st = set(range(4))
print(tup, st)
(0, 1, 2, 3) {0, 1, 2, 3}
Типичные проблемы и ошибки
Различие range в Python 2 и 3: В Python 2 range возвращал список, в Python 3 - объект range. Использование range как списка может привести к неожиданному поведению, если ожидать методы списка. Решение - явно преобразовывать через list().
Попытка использования нецелых чисел: range не принимает float. Ошибка TypeError.
# list(range(1.5, 5.5)) # TypeError
Для вещественных чисел применяются другие инструменты, например, numpy.arange или собственная функция.
Большие диапазоны и память: Создание списка из огромного range (миллионы элементов) может исчерпать оперативную память. Обработку лучше вести итеративно по самому range.
Непопадание в конечное значение: При заданном шаге последнее число может не совпадать с stop. Например, range(0,10,3) дает [0,3,6,9], 9 меньше 10, 12 уже выходит за границу. Это ожидаемое поведение.
Пустой список при start > stop и положительном шаге: Если начальное значение больше конечного, а шаг положительный, список будет пустым. Аналогично для отрицательного шага, если start < stop.
Расширенные примеры использования range
В этом разделе приведены неочевидные и комбинированные сценарии применения range для создания списков.
Пример 1: Список чисел от 0 до N с произвольным шагом
lst = list(range(2, 18, 3))
print(lst)
[2, 5, 8, 11, 14, 17]
Пример 2: Обратный порядок с шагом 1
lst = list(range(10, -1, -1))
print(lst)
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
Пример 3: Квадраты чисел
squares = [x**2 for x in range(1, 11)]
print(squares)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Пример 4: Список четных чисел
evens = list(range(0, 20, 2))
print(evens)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Пример 5: Список индексов и элементов (enumerate)
colors = ['red', 'green', 'blue']
indexed = list(enumerate(colors))
print(indexed)
# или создание списка пар с помощью range
pairs = [(i, colors[i]) for i in range(len(colors))]
print(pairs)
[(0, 'red'), (1, 'green'), (2, 'blue')] [(0, 'red'), (1, 'green'), (2, 'blue')]
Пример 6: Использование range для разбиения списка на части
full = list(range(1, 11))
chunk_size = 3
chunks = [full[i:i+chunk_size] for i in range(0, len(full), chunk_size)]
print(chunks)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
Пример 7: Создание многомерного списка (матрицы)
rows, cols = 3, 4
matrix = [[i * cols + j for j in range(cols)] for i in range(rows)]
print(matrix)
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
Пример 8: Range в сочетании с map
str_numbers = list(map(lambda x: f'Number {x}', range(1, 6)))
print(str_numbers)
['Number 1', 'Number 2', 'Number 3', 'Number 4', 'Number 5']
Пример 9: Range с отрицательным шагом и неполным покрытием
lst = list(range(20, 0, -3))
print(lst)
[20, 17, 14, 11, 8, 5, 2]
Число 0 не включено, так как шаг -3 пропускает его.
Пример 10: Создание списка из range и срез
r = range(10)
sublist = list(r)[3:7]
print(sublist)
[3, 4, 5, 6]
Пример 11: Использование range для тестирования производительности
import time
n = 1000000
start = time.time()
lst = list(range(n))
end = time.time()
print(f'Создание списка из {n} элементов заняло {end-start:.4f} сек.')
Создание списка из 1000000 элементов заняло 0.0562 сек. (результат может отличаться)