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

some_list = range(1,1000)

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

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


当前回答

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

其他回答

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))

这应该是最优的。

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

在Python 3中使用Range。

下面是一个示例函数,返回两个数字之间的数字

def get_between_numbers(a, b):
    """
    This function will return in between numbers from two numbers.
    :param a:
    :param b:
    :return:
    """
    x = []
    if b < a:
        x.extend(range(b, a))
        x.append(a)
    else:
        x.extend(range(a, b))
        x.append(b)

    return x

结果

print(get_between_numbers(5, 9))
print(get_between_numbers(9, 5))

[5, 6, 7, 8, 9]  
[5, 6, 7, 8, 9]

Python 3:

my_list = [*range(1001)]

你真的不应该在列表中使用数字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]