Python 3 диапазон поворота к списку
Я пытаюсь создать список с цифрами 1-1000
в нем. Очевидно, это было бы неприятно писать/читать, поэтому я пытаюсь составить список с диапазоном в нем. В Python 2 кажется, что:
some_list = range(1,1000)
работал бы, но в Python 3 диапазон аналогичен xrange
для Python 2?
Может кто-нибудь объяснить это?
Ответы
Ответ 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) включительно.