2013-12-16 57 views
1

目前正在通过教程“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 

,但我只是想知道为什么预期我的作品不工作?

回答

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

值得指出的是,因为他会通过一个教程,那他们很可能试图解释循环和迭代。告诉他做'elements = range(0,6)'并不能真正帮助你:) –

+0

感谢你的回答。你的开放使它点击了“你将一个列表追加到列表中”,所以Python将整个元素(完整列表)显示在一个 –

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是在本例中是不必要的,但它表明它是如何容易过滤或映射的那些元素。

+1

谢谢你的信息。我第一次听说“延长” - 欢呼声! –

1

.append将单个元素添加到列表中。这个单一的元素是range(0, 6),这是[0, 1, 2, 3, 4, 5](Johnsyweb在我面前)。您可以使用.extend附加每个

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 

输出你想要什么

+2

'#将范围(0,6)附加到元素。范围(0,6)创建一个列表“只是想指出这仅在Python 2.x中才是真实的。在Python 3.x中,range()返回一个不是列表的生成器 –

+0

谢谢,我将它添加到帖子 – Totem

+0

谢谢你的信息 –