← Все вопросы

Как создать список чисел от 1 до N в Python?

Задан 20 месяцев назад588 просмотров2 ответа
9

Хочу получить список чисел от 1 до 10 (или до N). Делаю range(10), но почему-то получаю числа от 0 до 9 и это вообще не список. Как сделать именно список от 1 до N включительно?

2 ответа

13
✓ Принятый ответ — помог автору

Тут два сюрприза 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 и недосчитаться последнего элемента.

4

Если шаг дробный (например, от 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 и делением проще и не требует библиотек.

Ваш ответ

Войдите, чтобы ответить на вопрос.