Подтвердить что ты не робот

Python 3 диапазон поворота к списку

Я пытаюсь создать список с цифрами 1-1000 в нем. Очевидно, это было бы неприятно писать/читать, поэтому я пытаюсь составить список с диапазоном в нем. В Python 2 кажется, что:

some_list = range(1,1000)

работал бы, но в Python 3 диапазон аналогичен xrange для Python 2?

Может кто-нибудь объяснить это?

4b9b3361

Ответ 1

Вы можете просто создать список из объекта диапазона:

my_list=list(range(1,1001))

Так вы делаете это с генераторами в python2.x. Как правило, вам, вероятно, не нужен список, так как вы можете более эффективно использовать my_list[i] (i+1), и если вам просто нужно перебрать его, вы можете просто вернуться на range.

Также обратите внимание, что на python2.x, xrange все еще индексируется 1. Это означает, что range на python3.x также обладает тем же свойством 2

1print xrange(30)[12] работает для python2.x

2 Аналогичное утверждение в 1 в python3.x есть print(range(30)[12]), и это также работает.

Ответ 2

в Python 3.x, функция range() получила свой собственный тип. поэтому в этом случае вы должны использовать итератор

list(range(1000))

Ответ 3

Вам действительно не нужно использовать цифры 1-1000 в списке. Но если по какой-то причине вам действительно нужны эти цифры, вы можете сделать:

[i for i in range(1, 1001)]

Сопоставление списка в двух словах:

Вышеприведенное описание списка соответствует:

nums = []
for i in range(1, 1001):
    nums.append(i)

Это просто синтаксис понимания списка, хотя из 2.x. Я знаю, что это будет работать в python 3, но я не уверен, есть ли еще обновленный синтаксис

Диапазон начинается с первого параметра; но заканчивается "В" до " Не включает второй параметр (при поставке 2 параметра, если первый параметр отключен, он начнется с" 0 ")

range(start, end+1)
[start, start+1, .., end]

Ответ 4

В Pythons <= 3.4 вы можете, как предложили другие, использовать list(range(10)), чтобы сделать список из диапазона (в общем, любой итерабельный).

Другая альтернатива, представленная в Python 3.5 с ее распаковками, заключается в использовании * в литеральном списке []:

>>> r = range(10)
>>> l = [*r]
>>> print(l)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Хотя это эквивалентно list(r), это буквальный синтаксис, и тот факт, что вызов функции не задействован, позволяет ему выполнять быстрее. Это также меньше символов, если вам нужно кодировать гольф: -)

Ответ 5

Собственно, если вы хотите 1-1000 (включительно), используйте функцию range(...) с параметрами 1 и 1001: range(1, 1001), потому что функция range(start, end) переходит от начала к (концу-1) включительно.