我正在学习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格式化程序打印数字?我如何取消嵌套此列表或访问其内容?如果有人能引导我完成这件事,我将非常感激。谢谢!
答案 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)