我有一个名为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循环,比较每个有组织的列表中的元素,如果它们是相同的打印它们
答案 0 :(得分:1)
我认为你比较两个排序列表的想法是正确的。我认为你在shared_ptr
行中有一个错误,因为你要将列表中的项目与另一个项目的属性进行比较。
据我所见,您实施了气泡排序算法。您不应该实现自己的排序算法,除非您有一些关于数据的额外信息,告诉您这是最佳选择。即使在这种情况下,使用一些经过测试和大量使用的库总是更好。例如,在您的算法中,两个变量都不必从0迭代到n。
一个观察结果是你不应该读两次文件,你可以读一次然后复制内容。此外,由于您使用属性列表作为主列表的项目(可变),因此当您使用myList[j][1]>myList[j+1]:
构造函数复制主列表时,只会复制项目的引用,从而提高效率使用内存(如果只想修改一个列表中的项目,也要考虑到这一点)。在我们的例子中,我们只处理订单,这不是偶然的元素。顺便说一句,我真的建议你阅读pep-8。
无论如何,你可以达到你想要的效果如下:
list()