目前正在通过教程“Python艰难的方式”。
我正在学习列表和循环(ex32)。
在练习结束时,Zed(教程作者)告诉我们要玩,我已经完成了。
# we can also build lists, first start with an empty one
elements = []
elements.append(range(0,6))
# then use the range function to do 0 to 5 counts
for element in elements:
print "Adding %s to elements" % element
# now we can print them out too
for element in elements:
print"Element was: %s" % element
这会产生如下输出:
Adding [0, 1, 2, 3, 4, 5] to elements
Element was: [0, 1, 2, 3, 4, 5]
我原本希望看到这样的事情:
Adding 0 to elements
Adding 1 to elements
Adding 2 to elements
Adding 3 to elements
Adding 4 to elements
Adding 5 to elements
Element was: 0
Element was: 1
Element was: 2
Element was: 3
Element was: 4
Element was: 5
但是Python希望在一个oner中打印出我的脚本,而不是每个列表组件的连接字符串。
我知道我可以更改脚本以完全反映作者脚本
# we can also build lists, first start with an empty one
elements = []
# then use the range function to do 0 to 5 counts
for i in range(0, 6):
print "Adding %d to the list." % i
# append is a function that lists understand
elements.append(i)
# now we can print them out too
for i in elements:
print "Element was: %d" % i
但我想知道为什么我的作品不能按预期工作?
答案 0 :(得分:3)
您要将列表附加到列表中!你只想创建列表!
您需要做的就是更改以下内容:
elements = []
elements.append(range(0,6))
进入
elements = range(0,6)
您将获得预期的结果
第一次创建elements
时,它是一个空白列表。然后,您将range(0,6)
附加到空列表中。现在元素看起来像[[0,1,2,3,4,5]]
(或[range(0,6)]
),这是一个包含一个元素,列表的列表。
答案 1 :(得分:1)
这是因为elements
只包含一个element
,即list
:[0, 1, 2, 3, 4, 5]
。 list.append()
将一个项目添加到列表的末尾。
In [1]: elements = []
In [2]: elements.append(range(0,6))
In [3]: elements
Out[3]: [[0, 1, 2, 3, 4, 5]]
也许你的意思是extend列表:
In [1]: elements = []
In [2]: elements.extend(range(0, 6))
In [3]: elements
Out[3]: [0, 1, 2, 3, 4, 5]
或者替换它?
In [4]: elements = range(0,6)
In [5]: elements
Out[5]: [0, 1, 2, 3, 4, 5]
甚至:
In [6]: elements = [element for element in range(0,6)]
In [7]: elements
Out[7]: [0, 1, 2, 3, 4, 5]
此示例中不需要list comprehension,但它演示了如何轻松过滤或映射这些元素。
答案 2 :(得分:1)
.append
将单个元素添加到列表中。单个元素是range(0, 6)
,即[0, 1, 2, 3, 4, 5]
(Johnsyweb在我之前得到它)。您可以使用.extend
附加每个。
答案 3 :(得分:1)
elements = []
elements.append(range(0,6))
# appends range(0,6) to elements. range(0,6) creates a list in Python 2.x but only in Python 2.x. thanks to adsmith for pointing this out.
print elements
[[0, 1, 2, 3, 4, 5]] # it's clear that elements has 1 element. A list.
这就是为什么
for i in elements:
print "adding %s to elements" % i
产生
adding [0,1,2,3,4,5] to elements
获得所需的输出:
elements = range(0,6)
OR
elements = [i for i in range(0,6)] # list comprehension
然后
for i in elements:
print "adding %s to elements" % i
输出你想要的东西