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

其他回答

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

list(太阳城(1000)

实际上,如果你想要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]

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

你可以从range对象中构造一个列表:

my_list = list(range(1, 1001))

这是在python2中使用生成器的方法。X也是。通常来说,你可能不需要一个列表,因为你可以更有效地获得my_list[i]的值(i + 1),如果你只需要迭代它,你可以回到range。

还要注意在python2上。X, xrange仍然是可索引的。这意味着python3上的范围。X也有相同的性质2

1打印xrange(30)[12]适用于python2.x

在python3中类似于1的语句。X是print(range(30)[12]),同样有效。