组织排序

时间:2015-11-17 01:53:25

标签: python sorting

我有一个名为countries.txt的列表,按名称,面积(以km2为单位),人口(例如["Afghanistan",647500.0,25500100])列出所有国家/地区。

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])

我还有两种排序算法:

def countryByArea(area):
    myList=readCountries('countries.txt') 

    for i in range(0,len(myList)): 
        for j in range(0,len(myList)-1): 
            if myList[j][1]>myList[j+1]:
                temp=myList[j]   
                myList[j]=myList[j+1]
                myList[j+1]=temp

    if area < len(myList): 
        return myList[area-1] 
    else:
        print "Invalid Parameter: %s" % (area) 

myList = readCountries(&#39; countries.txt&#39;)

for i in range(0,len(myList)):  
    for j in range(0,len(myList)-1): 
        if myList[j][1]>myList[j+1]: 
            temp=myList[j]  
            myList[j]=myList[j+1]
            myList[j+1]=temp
if area < len(myList): 
    return myList[area-1] 
else:
    print "Invalid Parameter: %s" % (area)

我正在尝试确定哪些国家/地区的人口和面积都相同。如果一个国家的人口数量最多,按地区排名第7,那么你的功能应该按照其排名(即第7位)报告。

我原以为你可以复制两个排序,返回整个有组织的列表,然后创建一个for循环,比较每个有组织的列表中的元素,如果它们是相同的打印它们

1 个答案:

答案 0 :(得分:1)

我认为你比较两个排序列表的想法是正确的。我认为你在shared_ptr行中有一个错误,因为你要将列表中的项目与另一个项目的属性进行比较。

据我所见,您实施了气泡排序算法。您不应该实现自己的排序算法,除非您有一些关于数据的额外信息,告诉您这是最佳选择。即使在这种情况下,使用一些经过测试和大量使用的库总是更好。例如,在您的算法中,两个变量都不必从0迭代到n。

一个观察结果是你不应该读两次文件,你可以读一次然后复制内容。此外,由于您使用属性列表作为主列表的项目(可变),因此当您使用myList[j][1]>myList[j+1]:构造函数复制主列表时,只会复制项目的引用,从而提高效率使用内存(如果只想修改一个列表中的项目,也要考虑到这一点)。在我们的例子中,我们只处理订单,这不是偶然的元素。顺便说一句,我真的建议你阅读pep-8。

无论如何,你可以达到你想要的效果如下:

list()