2013-12-16 55 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

謝謝你的信息 –