2015-11-13 82 views
0

我正在嘗試使用名爲countryByPop()的函數,該函數將一個整數作爲參數。函數執行兩項操作:首先,獲取國家/地區列表名爲"countries.text"的文本文件),並使用選擇排序算法按照羣體的降序進行排序。 二,使用整數參數返回第n個最普遍的國家。按降序對國家列表進行排序並返回第n個國家

readCountries()是我創建的方法來打開文件"countries.text"並顯示它。 結果看起來像這樣最終[Name, Area, Population]

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

現在,我用的第一(排序)功能的一部分來完成:

def countryByPop(): 
    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] = Countries[j] 
       Countries[j] = temp 
       madeSwap = True 
     if not madeSwap: 
      return Countries 
    return Countries 

我似乎無法弄清楚如何返回第n個最受歡迎的國家。

可以說,我經過18作爲函數的整數參數,18爲您提供了土耳其在列表中的第18人口最多的城市,它應該打印出來是這樣的:

>>>>countryByPop(18) 
["Turkey",780580.0,75627384] 

>>>countryByPop(-1) 
Invalid parameter: -1 
+2

您已經在排序功能中按編號訪問國家/地區。現在有什麼問題? – Psytho

+2

你的意思是'Countries [n]'? – Pynchia

+0

您在下面評論您指示使用選擇排序,但我想知道您是不是應該進行完整排序,而是使用快速選擇來查找第k個(第n個)元素,該快速選擇只進行部分排序。 – rcgldr

回答

1

首先是存在函數的簽名沒有n參數,wihch應改爲

def countryByPop(n): 

然後,到了最後,假設國家是有序的,你需要返回其n-th

return Countries[n] 

注:Python允許你這樣的情況下,你需要返回排序列表和第n個元素,你可以做返回記錄

return Countries, Countries[n] 

在我的愚見,這是簡單的只返回列表,並有來電接入其n-th元素

其它注意事項:

  • 請按照PEP-8 guidelines命名變量

  • 不重新發明輪子並使用python自己的排序功能 功能(與列表sort方法或使用sorted

+0

太棒了。這對我來說真的很好(Y) – arsalunic612

2

的Python已經有方法以您需要的方式對序列列表進行排序。例如,

# sort the list of lists countries, ordering by the third element in reverse 
countries.sort(key=lambda e: -e[2]) 
# the 10th most populous country: 
countries[10] 

也就是說,你可以告訴sort方法訂購的countries元素(這正好是3個元素本身的列表)增加( - 人口)的順序:即人口減少。然後,排序列表的第一個元素將是人口最多的國家等等。

+0

我感謝你的幫助,我也知道python的排序方法。但是我有一些嚴格的指令來使用選擇排序算法。 – arsalunic612