为什么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]
为什么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]
引用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,所以在您的情况下,结果列表是范围中的数字列表。
[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]
。
在第一个示例中,您只需使用方括号表示法创建一个列表对象,并在其中放置一个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
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
我知道这已经被问过,但我不能找到一个傻瓜目标。谷歌没有发现任何相关的东西。 – user2357112
@JanHudec感谢您的回复,但您可以扩展更多关于您的意思吗? – Seoul
@ user2357112是的,我试图查看它,只是决定问我是否因为赞成分数而不知道分数 – Seoul