In Python 2.7 what is difference between var1 = [list(range(



在LPTHW的ex32中,我发现我可以通过以下操作列出一个列表:

var1 = [list(range(6))]

var2 = range(6)

但是,当我使用"%d"在for循环中打印var1时,我得到一个typeError,说它想要一个数字而不是列表。同时var2将使用"%d"打印。我是如何构造var1以要求特定的格式说明符的?

让我们迭代一些案例:

range(6)

这会生成一个列表[0, 1, 2, 3, 4, 5]

list(range(6))

list()期望一个可迭代的对象,并将其转换为列表。因此,list(range(6))获取range(6)返回的列表,并将其成员复制到一个新列表中。所以我们得到[0, 1, 2, 3, 4, 5]

[range(6)]

这使用了python列表创建语法。这将把每个参数放在括号内,并把它们放在一个列表中。所以我们得到:[ [0, 1, 2, 3, 4, 5] ]。请注意,这是一个列表的列表。

[list(range(6))]

在这里,我们应该知道发生了什么。或多或少,range(6)list(range(6))做了相同的事情,所以我们期望得到与前一行相同的结果,所以我们看到:[ [0, 1, 2, 3, 4, 5] ]

关于蟒蛇3.x的笔记

Python3试图制造更多由内置返回的惰性对象或迭代器。因此range(6)在python 3.x中不返回列表,而是返回一个自定义范围对象。这个对象可以通过执行list(range(6))转换为列表,因为它是可迭代的。然而,如果您不需要对返回的对象进行变异,那么将其保留为范围对象可能是有意义的。

您对var1的错误在于您实际上有一个2d list。通过将整个内容括在方括号中,您实际上是在创建一个带有单个元素的外部list。这就是您错误的原因,因为其中一个元素也是list

>>> list(range(6))
[0, 1, 2, 3, 4, 5]
>>> [list(range(6))]
[[0, 1, 2, 3, 4, 5]]

只需去掉封闭的方括号即可使其正常工作。此外,在Python 2中,您不需要进行list转换,只需执行:

range(6)

这是你一直以来的第二个选择。:)

var1 = [list(range(6))]创建列表的列表,而var2 = range(6)创建列表。

>>> var1 = [list(range(6))]
>>> var1
[[0, 1, 2, 3, 4, 5]]
>>> var2 = range(6)
>>> list(var2)
[0, 1, 2, 3, 4, 5]

当您在方括号中包含python中的变量时,它会返回一个列表,其中包含的变量作为列表的元素:

>>> var3 = 1
>>> var4 = [var3]
>>> isinstance(var4, list)
True

所以list(range(6))就是你需要做的全部。它返回一个列表。由于您通过执行[list(range(6))]将其包含在方括号中,因此您将其作为一个列表的列表。

最新更新