2013-03-30 153 views
2

在遵循關於Python的在線課程時,我們鼓勵自己編寫某個程序。這不是一個標誌,而只是爲了練習。我不想幫助解決問題,但我需要幫助,爲什麼我的代碼沒有做我認爲會做的事情。Python:My for循環不會遍歷列表中的所有項目

代碼的(相關)部分如下:

raw_restaurants = file.readlines() 

print(raw_restaurants) 

restaurants = [] 
information = [] 
for i in raw_restaurants: 
    if len(information) < 5: 
     information.append(i.strip()) 
    if len(information) == 5: 
     restaurants.append(information) 
     information = [] 

這是所使用的列表。原始列表是使用file.readlines()創建的。

['Georgie Porgie\n', '87%\n', '$$$\n', 'Canadian,Pub Food\n', '\n', 
'Queen St. Cafe\n', '82%\n', '$\n', 'Malaysian,Thai\n', '\n', 
'Dumplings R Us\n', '71%\n', '$\n', 'Chinese\n', '\n', 
'Mexican Grill\n', '85%\n', '$$\n', 'Mexican\n', '\n', 
'Deep Fried Everything\n', '52%\n', '$\n', 'Pub Food\n'] 

的問題是,我的函數給出的輸出:

[['Georgie Porgie', '87%', '$$$', 'Canadian,Pub Food', ''], 
['Queen St. Cafe', '82%', '$', 'Malaysian,Thai', ''], 
['Dumplings R Us', '71%', '$', 'Chinese', ''], 
['Mexican Grill', '85%', '$$', 'Mexican', '']] 

這意味着,約炸一切整體的一部分已經disseapeared。 任何人都知道我在做什麼錯?

+1

注意,編輯你的問題有點更大的可讀性之後,錯誤就變得非常明顯... – Floris

回答

5

您只有條目超過Mexican Grill條目的空行,因此if len(information) == 5:測試永遠不會變爲True。

information一次簡單的追加如果有物品在它:

for i in raw_restaurants: 
    if len(information) < 5: 
     information.append(i.strip()) 
    if len(information) == 5: 
     restaurants.append(information) 
     information = [] 
if information: 
    restaurants.append(information) 
+0

+1不僅發現問題,但給出一個解決方法(即使輸入文件有缺陷,它被正確解釋)。 – Floris

+0

謝謝,它現在正在工作! – Reinier