Python 3将范围转到列表

我正在试着制作一个1-1000数字。 显然,这将是讨厌的写/读,所以我试图做一个范围内的列表。 在Python 2中似乎是这样的:

 some_list = range(1,1000) 

会工作,但在Python 3中,范围类似于Python 2的xrange

任何人都可以提供一些见解?

5 Solutions collect form web for “Python 3将范围转到列表”

你可以从范围对象构造一个列表:

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

  • 你计划如何处理迁移到Python 3?
  • 字典的深度副本在Python中
  • exec如何与当地人合作?
  • 如何可靠地在Python中分割string?
  • 用Python生成一个随机字母
  • Python中的两个variables具有相同的id,但不包含列表或元组
  • Tkinter:“Python可能没有configuration为Tk”
  • 关于tkinter和ttk的Python 3的新教程
  • 'str'对象没有属性'decode'。 Python 3错误?
  • Python 3解释器是否具有JITfunction?
  • Python 3:UnboundLocalError:赋值之前引用的局部variables