Boa*_*use 145 python list range python-3.x
我正在尝试制作一个包含数字的列表1-1000
.显然,写入/读取会很烦人,所以我试图制作一个带有范围的列表.在Python 2中,似乎:
some_list = range(1,1000)
Run Code Online (Sandbox Code Playgroud)
会有用,但在Python 3中,范围类似于xrange
Python 2?
任何人都可以对此提供一些见解吗?
mgi*_*son 184
您只需从范围对象构造一个列表:
my_list = list(range(1, 1001))
Run Code Online (Sandbox Code Playgroud)
这就是你在python2.x中使用生成器的方法.通常来说,你可能不需要列表,因为你可以my_list[i]
更高效地获得值(i + 1
),如果你只需要迭代它,你就可以重新开始range
.
另请注意,在python2.x上,xrange
仍然是可索引的1.这意味着range
在python3.x上也具有相同的属性2
1print xrange(30)[12]
适用于python2.x
2在python3.x中对1的类似语句是print(range(30)[12])
,也可以.
nur*_*qim 23
在Python 3.x中,range()
函数有自己的类型.所以在这种情况下你必须使用迭代器
list(range(1000))
Jim*_*ard 23
在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]
Run Code Online (Sandbox Code Playgroud)
虽然这相当于list(r)
,它是文字语法,并且不涉及函数调用这一事实让它更快地执行.如果你需要编码高尔夫,这也是更少的角色:-)
xua*_*g84 11
Python3缺少直接获取范围列表的函数的原因是因为原始的Python3设计器在Python2中非常新手.他只考虑在for循环中使用range()函数,因此,列表永远不需要扩展.实际上,我们经常需要使用range()函数来生成列表并传递给函数.
因此,在这种情况下,与Python2相比,Python3不太方便,因为:
尽管如此,您仍然可以通过以下方式使用列表扩展:
[*range(N)]
Run Code Online (Sandbox Code Playgroud)
您实际上不需要在列表中使用数字1-1000。但是,如果由于某些原因您确实需要这些数字,则可以执行以下操作:
[i for i in range(1, 1001)]
Run Code Online (Sandbox Code Playgroud)
清单理解概述:
上面的列表理解转换为:
nums = []
for i in range(1, 1001):
nums.append(i)
Run Code Online (Sandbox Code Playgroud)
尽管只是2.x版本,但这只是列表理解语法。我知道这将在python 3中工作,但不确定是否还有升级的语法
范围从第一个参数开始;但以不包括第二个参数为结束(当提供2个参数时;如果第一个参数保留,则其将从'0'开始)
range(start, end+1)
[start, start+1, .., end]
Run Code Online (Sandbox Code Playgroud)