为什么我的范围函数的输出不是列表?

Fiv*_*ive 6 python python-3.x

根据Python文档,当我执行范围(0,10)时,此函数的输出是0到9的列表,即[0,1,2,3,4,5,6,7,8,9].然而,尽管有很多这样的在线工作示例,但我的PC上的Python安装并没有输出.

这是我的测试代码......

test_range_function = range(0, 10)
print(test_range_function)
print(type(test_range_function))
Run Code Online (Sandbox Code Playgroud)

我想的输出应该是打印的列表,类型函数应该将其作为列表输出.相反,我得到以下输出...

c:\Programming>python range.py
range(0, 10)
<class 'range'>
Run Code Online (Sandbox Code Playgroud)

我没有在网上的任何一个例子中看到这一点,并且非常欣赏这方面的一些亮点.

Ash*_*ary 14

这是因为range和其他函数式的方法,如map,reducefilter,在Python 3返回迭代器在Python 2它们返回的列表.

Python 3.0中的新功能:

range()现在表现得像xrange()以前的行为,除了它适用于任意大小的值.后者不再存在.

要将迭代器转换为列表,您可以使用以下list函数:

>>> list(range(5)) #you can use list()
[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)


Thi*_*ter 6

通常,您不需要将范围具体化为实际列表,只是想迭代它.因此,特别是对于使用迭代器的较大范围可以节省内存.

因此,range()在Python 3中返回一个迭代器(就像xrange()在Python 2中一样).list(range(..))如果您因某些原因需要实际列表,请使用.

  • +1,这解释了改变的原因以及为什么它更好.一个小的,微妙的区别 - 3.x中的`range()`返回一个可迭代的,而不是一个迭代器.它比直接迭代器有一些优点,比如它在循环时没有用尽,而且它是一个序列,所以你可以将它切片等等.`range(10)[:5] == range(0,5 )`. (6认同)