按降序排列国家/地区列表并返回第n个国家/地区

时间:2015-11-13 07:59:43

标签: python sorting search

我正在尝试使用名为countryByPop()的函数,该函数将整数作为参数。函数执行两项操作: 首先,获取国家/地区列表(来自名为"countries.text"的文本文件),并使用选择排序算法按人口的降序对其进行排序。 其次,使用整数参数并返回第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 个答案:

答案 0 :(得分: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个元素本身的列表):即减少人口。然后排序列表的第一个元素将是人口最多的国家,依此类推。

答案 1 :(得分: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