2014-02-13 43 views
0

我有這個assignement,我不得不把一個文本文件導入列表,以便它看起來像這樣最終:列表與冒泡排序排序(名單列表)

[["Afghanistan",647500.0,25500100],["Albania",28748.0,2821977],...,["Zimbabwe",390580.0,12973808]] 

所以它被定義列表的列表通過函數readcountries() 我想根據列表中的一個參數(即在國家名稱之後的第二個數字的人口)以泡泡排序(這是分配要求的)排序該列表)。

這是我迄今爲止

def bubblesort(): 
    Countries = readcountries() 
    for i in range(0,len(Countries)): 
     madeSwap = False 
     for j in range (0,len(Countries)-(i+1)): 
      if Countries[j][2] > Countries[j+1][2]: 
       temp = Countries[j+1] 
       Countries[j+1][2] = Countries[j][2] 
       Countries[j] = temp 
       madeSwap = True 
      if not madeSwap: 
       return 

但我沒有得到任何與此排序出於某種原因,我甚至有麻煩時,並未看到排序列表。 歡迎任何幫助

+2

那麼,對於初學者,你可能想要返回'Countries'。 – 2rs2ts

+2

另外,你想交換整個條目,而不是'[2]' – Eric

回答

0

問題是在這裏Countries[j+1][2] = Countries[j][2] 你有Countries[j+1] = Countries[j]

而且

更換你必須調用這個

if not madeSwap: 
       return 

外的

,並返回列表

def bubblesort(): 
     Countries = [["Afghanistan",647500.0,3],["Albania",28748.0,1],["Zimbabwe",390580.0,2]] 
     for i in range(0,len(Countries)): 
      madeSwap = False 
      for j in range (0,len(Countries)-(i+1)): 
       if Countries[j][2] > Countries[j+1][2]: 
        temp = Countries[j+1] 
        Countries[j+1] = Countries[j] 
        Countries[j] = temp 
        madeSwap = True 
      if not madeSwap: 
       return Countries 
     return Countries 

>>> bubblesort() 
[['Afghanistan', 647500.0, 1], ['Zimbabwe', 390580.0, 2], ['Albania', 28748.0, 3]]