为什么{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]
答案 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)
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