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),包括在内。