Как создать список чисел от 1 до N в Python?
Хочу получить список чисел от 1 до 10 (или до N). Делаю range(10), но почему-то получаю числа от 0 до 9 и это вообще не список. Как сделать именно список от 1 до N включительно?
2 ответа
Тут два сюрприза range, которые надо понять.
Первый: range(N) начинается с 0 и идёт до N-1 (конец не включается). Поэтому range(10) это 0..9.
Второй: range это не список, а ленивый объект. Чтобы получить список — оберните в list().
Чтобы было от 1 до N включительно, задайте старт 1 и стоп N+1:
nums = list(range(1, 11)) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Общая форма — range(start, stop, step):
list(range(1, 11)) # 1..10
list(range(0, 11, 2)) # [0, 2, 4, 6, 8, 10] — чётные
list(range(10, 0, -1)) # [10, 9, ..., 1] — в обратную сторону
Если нужен не просто диапазон, а список по формуле — генератор списка:
squares = [x*x for x in range(1, 6)] # [1, 4, 9, 16, 25]
Важный момент: в обычном цикле for i in range(1, 11): оборачивать в list() не нужно — по range и так можно итерироваться, и это экономнее по памяти. list() нужен, только когда вам реально нужен материализованный список (например, чтобы его изменить или взять срез).
Частая ошибка — забыть про +1 и недосчитаться последнего элемента.
Если шаг дробный (например, от 0 до 1 с шагом 0.1), range не подойдёт — он работает только с целыми. Используйте генератор с делением:
steps = [i / 10 for i in range(11)] # 0.0, 0.1, ... 1.0
Или, если уже стоит NumPy, есть numpy.arange(0, 1.1, 0.1) и numpy.linspace. Но для учебных задач генератор списка с целым range и делением проще и не требует библиотек.