我正在尝试使用名为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
答案 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
)