2017-07-04 96 views
3

为什么Python 3中的[range(10)]list(range(10))不同?为什么[范围(10)]和列表(范围(10))不一样?

输出如下:

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

我知道这已经被问过,但我不能找到一个傻瓜目标。谷歌没有发现任何相关的东西。 – user2357112

+0

@JanHudec感谢您的回复,但您可以扩展更多关于您的意思吗? – Seoul

+0

@ user2357112是的,我试图查看它,只是决定问我是否因为赞成分数而不知道分数 – Seoul

回答

11

引用the docs, “名单可在几个方面构建”:

[range(10)] 

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

list(range(10)) 

经过range object作为参数传递给list constructor

class list([iterable])

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

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

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]

1

在第一个示例中,您只需使用方括号表示法创建一个列表对象,并在其中放置一个range()对象。另一方面,在你的第二个例子中,你使用list()内建的range()对象转换为列表。

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

The documentation for list() notes this

的构造函数建立,其项目是相同的,在相同的顺序可迭代的项目清单。可迭代可以是序列,支持迭代的容器或迭代器对象。如果可迭代已经是一个列表,则复制被创建并返回,类似于iterable [:]。例如,list('abc')返回['a','b','c']和列表((1,2,3))返回[1,2,3]。如果没有给出参数,构造函数会创建一个新的空列表[]。在python 3.X

-1

range()功能类似于在python 2.x.In的Python 2.x的所述xrange()功能range()产生的列表,并返回xrange()一个迭代 - 序列对象

在蟒2.x的

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

在蟒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

相关问题