我有这样的代码,它接受一个txt文件,输出一个国家列表。
def readCountries(filename):
result=[]
lines=open(filename)
for line in lines:
result.append(line.strip('\n').split(',\t'))
for sublist in result:
sublist[1]=float(sublist[1])
sublist[2]=int(sublist[2])
return result我正在尝试创建一个选择排序,按照人口降序对列表进行排序,并打印信息。
这是我的代码,我做错了什么?
def countryByPop(population):
myList=readCountries('countries.txt')
for i in range(0,len(myList)):
largest = i
for j in range(i,len(myList)):
if myList[j]<myList[smallest]:
smallest = j
temp = myList[i]
myList[i] = myList[smallest]
myList[smallest] = temp
if population range(0,len(myList))
return temp
else:
print "Invalid Parameter: %s" %(population)发布于 2015-11-16 22:44:07
首先,定义变量largest并不再使用它。然后使用未定义的变量smallest。我假设您打算将smallest的所有实例更改为largest,而largest将成为列表中指向人口最多的国家的索引。您应该将smallest的所有实例更改为largest。
要按降序排序,您需要在外层for循环的每次迭代中找到最大的项,然后将其移动到myList[i]。但是,通过测试myList[j] < myList[smallest],您最终会将最小的元素移到列表的开头。您应该将其更改为>而不是<。这样,内部for循环就可以找到人口比largest所指的国家更多的国家。
另外,您的if语句实际上并不是在检查国家人口。myList的每个元素都是一个列表。所以你把一个列表和一个列表进行比较。相反,您希望比较列表中的一个元素。如果列表的第三个元素存储人口,那么语句应该读取myList[j][2] > myList[largest][2]。注意第二组大括号来访问这个居群元素。
def countryByPop(population):
myList=readCountries('countries.txt')
for i in range(0,len(myList)):
largest = i
for j in range(i, len(myList)):
if myList[j][2] > myList[largest][2]:
largest = j
temp = myList[i]
myList[i] = myList[largest]
myList[largest] = temp
if population < len(myList):
return myList[population-1]
else:
print "Invalid Parameter: %s" % (population)如果population参数用于检索第n个人口最多的国家,那么您可以通过myList[population-1]检索该项。在if语句中使用range()是不必要的。代码反映了这一变化。您应该使用比population更好的名称来澄清意图,例如country_rank。
发布于 2015-11-16 22:23:16
您不会返回mylist
def countryByPop(population):
...
return mylist您还需要弄清楚变量smallest和largest的含义。在使用smallest之前,我不知道它是在哪里分配的。
假设国家名称是记录中的第一个元素,则需要比较myList[j][1] < myList[smallest][1],例如,如果人口是第二个元素
最后,在Python中,您可以编写以下三行
temp = myList[i]
myList[i] = myList[smallest]
myList[smallest] = temp作为一个整体
myList[i], myList[smallest] = myList[smallest], myList[i]发布于 2017-01-15 09:16:46
在jquery中试试这个,非常简单。
变量选择排序=函数(A) {
for (var i = 0; i < A.length; i++) {
var imin = i;
for (var j = i + 1; j <= A.length; j++) {
if (A[j] < A[imin])
imin = j;
}
var tmp = A[i];
A[i] = A[imin];
A[imin] = tmp;
}
return A;
};
var A = [10, 20, 30, 40, 50, 60, 70, 80];
var Aftersorted = Selectionsort(A);
console.log(Aftersorted);https://stackoverflow.com/questions/33745660
复制相似问题