为什么 [range(10)] 和 list(range(10)) 不同?

3

为什么在Python 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]

我知道这个问题以前已经被问过了,但我找不到重复的目标。谷歌也没有找到任何相关的内容。 - user2357112
@JanHudec 感谢您的回复,但您能否更详细地解释一下您的意思? - Seoul
@user2357112 是的,我也试着查找了,但最终决定问一下,即使会被踩,因为学习比担心积分更重要。 - Seoul
@ChristianDean:不,那个不行。那个问题是关于如何构建一个空列表或字典的,而答案则侧重于时间安排。它没有涵盖使用[]list创建带有元素列表的语义。 - user2357112
这个问题(https://dev59.com/U2Ag5IYBdhLWcg3wWpxE)看起来更好,但我认为那个问题中的字典会分散注意力,不适合作为一个好的 []-vs-list 重复目标。 - user2357112
@user2357112 你说得对。我没有注意到。那是一个非常糟糕的重复目标。我会删除我的评论。 - Christian Dean
4个回答

11

引用文档所述,"列表可以通过多种方式构建":

[range(10)]

生成包含1个元素的列表,其中包括range对象。一般而言,方括号内用逗号隔开的多个元素构成一个包含这些元素的列表。

list(range(10))

range对象作为参数传递给list构造函数

class list([iterable])

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

在Python 3中,range表示数字的不可变序列,因此在您的情况下,生成的列表是来自这个范围的数字列表。


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()则会返回一个空列表(如果未传入任何内容),或尝试将传入的内容转换为列表对象。 list()的文档注意到这一点
构造函数会创建一个列表,其项目与iterable的项目相同且顺序相同。iterable可以是序列、支持迭代的容器或迭代器对象。如果iterable已经是列表,则会创建并返回一个副本,类似于iterable[:]。例如,list('abc')返回['a','b','c'],list((1,2,3))返回[1,2,3]。如果没有给出参数,则构造函数创建一个新的空列表,[]。

0
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]

如需进一步参考,请阅读此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接