Python 3将范围转到列表
我正在试着制作一个1-1000
数字。 显然,这将是讨厌的写/读,所以我试图做一个范围内的列表。 在Python 2中似乎是这样的:
some_list = range(1,1000)
会工作,但在Python 3中,范围类似于Python 2的xrange
?
任何人都可以提供一些见解?
你可以从范围对象构造一个列表:
my_list=list(range(1,1001))
这也是你如何使用python2.x中的生成器来完成的。 通常来说,你可能不需要列表,因为你可以更有效地获得my_list[i]
的值( i+1
),如果你只需要迭代它,就可以回到range
。
另外请注意,在python2.x中, xrange
仍然是可索引的1 。 这意味着python3.x的range
也具有相同的属性2
1 print xrange(30)[12]
适用于python2.x
2在python3.x中类似的语句是print(range(30)[12])
,这也是可行的。
在Python 3.x中, range()
函数有它自己的types。 所以在这种情况下,你必须使用迭代器
list(range(1000))
你真的不需要在列表中使用数字1-1000。 但如果由于某种原因,你确实需要这些数字,那么你可以这样做:
[i for i in range(1, 1001)]
列表理解简而言之:
以上列表理解转化为:
nums = [] for i in range(1, 1001): nums.append(i)
这只是列表理解的语法,虽然从2.x. 我知道这将在python 3中工作,但不知道是否有升级的语法
范围开始包含第一个参数; 但结束于, 不包括第二个参数(当提供2个参数;如果第一个参数是closures的,它将从'0'开始)
range(start, end+1) [start, start+1, .., end]
在Pythons <3.5中,您可以像其他人所build议的那样,使用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)
,但它是字面语法,并且不涉及任何函数调用的事实会让它更快地执行。
如果你需要编码高尔夫球,它也less了个字符:-)
实际上,如果你想1-1000(包括),使用range(...)
函数与参数1和1001: range(1, 1001)
,因为range(start, end)
function从开始到range(start, end)
1),包括在内。