我正试着列一个数字为1-1000的清单。显然,这将是令人讨厌的写/读,所以我试图使一个范围内的列表。在Python 2中,似乎:

some_list = range(1,1000)

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

有人能对此提供一些见解吗?


当前回答

你真的不应该在列表中使用数字1-1000。但如果出于某种原因,你确实需要这些数字,那么你可以这样做:

[i for i in range(1, 1001)]

概括地列出理解:

上述列表的理解转化为:

nums = []
for i in range(1, 1001):
    nums.append(i)

这只是2.x中的列表理解语法。我知道这将在python 3中工作,但我不确定是否有一个升级的语法

Range开始包括第一个参数;但结束Up To,不包括第二个参数(当提供2个参数;如果省略了第一个参数,它将从'0'开始)

range(start, end+1)
[start, start+1, .., end]

其他回答

In fact, this is a retro-gradation of Python3 as compared to Python2. Certainly, Python2 which uses range() and xrange() is more convenient than Python3 which uses list(range()) and range() respectively. The reason is because the original designer of Python3 is not very experienced, they only considered the use of the range function by many beginners to iterate over a large number of elements where it is both memory and CPU inefficient; but they neglected the use of the range function to produce a number list. Now, it is too late for them to change back already.

如果我是Python3的设计者,我会:

使用irange返回一个序列迭代器 使用lrange返回一个序列列表 使用range返回序列迭代器(如果元素数量很大,例如range(9999999))或序列列表(如果元素数量很小,例如range(10))

这应该是最优的。

在Python 3中。X, range()函数有自己的类型。在这种情况下,你必须使用迭代器

list(太阳城(1000)

实际上,如果你想要1-1000(包括),使用带有参数1和1001的range(…)函数:range(1,1001),因为range(start, end)函数从start到(end-1),包括(end-1)。

在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),但它是字面语法,而且不涉及函数调用的事实确实让它执行得更快。它也更少的字符,如果你需要编码高尔夫:-)

Python3缺少直接获取远程列表的函数的原因是,最初的Python3设计者在Python2方面是新手。他只考虑在for循环中使用range()函数,因此,列表永远不需要扩展。事实上,我们经常需要使用range()函数来生成一个列表并传递给一个函数。

因此,在这种情况下,Python3比Python2更不方便,因为:

在Python2中,我们有xrange()和range(); 在Python3中,我们有range()和list(range())

尽管如此,你仍然可以这样使用列表展开:

[*range(N)]