为什么[范围(10)]和列表(范围(10))不一样?

时间:2017-07-04 06:18:26

标签: python list python-3.x range

为什么{3}中的[range(10)]list(range(10))有所不同?

输出如下:

>>> print([range(10)])
[range(0, 10)]
>>> print(list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

4 个答案:

答案 0 :(得分:11)

引用the docs,“列表可以通过多种方式构建”:

[range(10)]

构建1个项目的列表,range object。通常,用方括号括起来的逗号分隔的项目列表构成了所述项目的列表。

list(range(10))

range object作为参数传递给list constructor

  

class list([iterable])

     

构造函数构建一个列表,其项目与 iterable的项目的顺序相同且顺序相同。 iterable 可以是序列,支持迭代的容器,也可以是迭代器对象。如果 iterable 已经是一个列表,则会生成并返回一个副本,类似于iterable[:]。例如,list('abc')返回['a', 'b', 'c']list( (1, 2, 3) )返回[1, 2, 3]。如果没有给出参数,构造函数将创建一个新的空列表[]

Python 3 represents an immutable sequence of numbers中的范围,因此在您的情况下,结果列表是范围内的数字列表。

答案 1 :(得分:5)

[x]表示“制作一个元素为x”的列表。

list(x)表示“制作一个列表,其元素是 x元素。”

range(10)返回一个打印为range(0, 10)的对象(因为它在打印时显示起始值)并且其元素是从0到9的整数,因此[range(10)]给出一个 - 元素列表[range(0, 10)]list(range(10))提供了10个元素的列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

答案 2 :(得分:1)

在第一个示例中,您只是使用方括号表示法创建列表对象,并在其中放置range()对象。另一方面,在第二个示例中,您使用list()内置来将<{em} range()对象转换为列表。

不同之处在于,使用[]只会创建一个列表。它对传入的内容没有任何作用。另一方面,list()将返回一个空列表,如果你没有传入任何内容,或者尝试将你传入的内容转换为列表对象。

The documentation for list() notes this

  

构造函数构建一个列表,其项目与iterable的项目相同且顺序相同。 iterable可以是序列,支持迭代的容器,也可以是迭代器对象。如果iterable已经是一个列表,则会生成并返回一个副本,类似于iterable [:]。例如,列表(&#39; abc&#39;)会返回[&#39; a&#39;,&#39; b&#39;,&#39; c&#39;]和列表((1,2) ,3))返回[1,2,3]。如果没有给出参数,构造函数将创建一个新的空列表[]。

答案 3 :(得分:-1)

python 3.x中的

range()函数类似于python 2.x中的xrange()函数。在Python 2.x range()中生成了一个列表,xrange()返回一个迭代器 - 一个序列对象

在python 2.x

>>> range(1)
[0]
>>> type(range(1))
<type 'list'>

在python 3.x

>>> range(1)
range(0, 1)
>>> type(range(1))
<class 'range'>

要获得列表,您可以在list()

中传递生成器
>>> print (list(range(10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

如需进一步参考,请阅读here