使用范围功能填充列表时,为什么在使用%d打印时会出现列表格式错误?

时间:2017-07-09 10:34:46

标签: python python-2.7

我正在学习python,当我使用范围函数创建一个列表行为时,我有点困惑。希望有人可以帮助我解决这个问题吗?这是我写的一段代码:

elements = []
elements.append(range(1, 6))
for number in elements:
    print "Line %d" % number

当我运行时,我收到第4行的错误:

TypeError:%d format:需要一个数字,而不是列表

如果我重新编写代码:

elements = []
for i in range(1, 6):
    elements.append(i)
for number in elements:
    print "Line %d" % number

它运行我对第一个块的期望。

如果我用%r替换%d,它会将列表打印为

行[1,2,3,4,5]

而不是在各自的行上打印每个数字。

当我直接将范围附加到元素列表时,它是否以某种方式创建列表而不是像使用for时那样的迭代值? 通过一点点测试,我得到了这个:

>>> print range(1, 6)
[1, 2, 3, 4, 5]
>>> elements = []
>>> elements.append(range(1, 6))
>>> print elements
[[1, 2, 3, 4, 5]]

这就是为什么它不能让我使用%d格式化程序打印数字?我如何取消嵌套此列表或访问其内容?如果有人能引导我完成这件事,我将非常感激。谢谢!

3 个答案:

答案 0 :(得分:3)

将列表附加到另一个列表时发生的事情是您将获得嵌套列表。最初你有elements = []。在该列表中,您添加了另一个列表(range(1, 6)),使其成为列表的列表。

>>> elements = []
>>> elements
[]
>>> elements.append(range(1, 6))
>>> elements
[[1, 2, 3, 4, 5]]

您可以在此处进行连接,而不是使用+运算符进行追加(即elements + range(1, 6)

>>> elements = []
>>> elements
[]
>>> elements + range(1, 6)
[1, 2, 3, 4, 5]

答案 1 :(得分:2)

因为range(1,6)返回一个列表。所以elements看起来像: [[1, 2, 3, 4, 5]]和for循环的第一次迭代number = elements[0] = [1, 2, 3, 4, 5],这是一个列表。

如果你这样做,你会得到你所期望的:

elements = []
elements = range(1, 6)
for number in elements:
    print "Line %d" % numberr

答案 2 :(得分:2)

在Python 2.7中,range返回一个列表。 append method会在列表末尾添加一个项目。

因此,当您编写elements.append(range(1, 6))时,elements现在是一个包含单个元素的列表(即列表)。

您可能想要使用

elements.extend(range(1,6)) # 'extend' append all elements of the given list

或直接

elements = range(1,6)