我有一个名为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('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)我正在尝试确定哪些国家在人口和面积方面处于相同的顺序。如果一个国家既是第7人口最多的国家,也是按面积排名第7的国家,则应根据您的功能及其排名(即第7)进行报告。
我在想,您可以复制这两个排序,返回整个有序列表,然后创建一个for循环来比较每个有序列表中的元素,如果它们是相同的,则打印它们
发布于 2015-11-17 12:13:22
我认为您比较两个排序列表的想法是正确的。我认为您在myList[j][1]>myList[j+1]:行中有一个错误,因为您正在将列表中的一个项目与另一个项目的属性进行比较。
据我所知,您实现了冒泡排序算法。你不应该实现你自己的排序算法,除非你有一些额外的数据信息告诉你这是最好的选择。即使在这种情况下,使用一些经过测试和大量使用的库也总是更好的。例如,在您的算法中,不需要两个变量都从0迭代到n。
一个观察结果是,您不应该重复读取该文件,您可以先读取一次,然后复制内容。此外,由于您使用属性列表作为主列表的项(这些属性是可变的),因此当您使用list()构造函数复制主列表时,仅复制项的引用,从而更有效地使用内存(如果您只想修改一个列表中的项,请考虑这一点)。在我们的情况下,我们只在订单上工作,这不会冒险elements.By的方式,我真的建议你阅读pep-8。
无论如何,你可以实现你想要的东西,如下所示:
by_name_list = read_countries('countries.txt')
by_area_list = list(by_name_list) # a shallow copy of the list
by_name_list.sort(key=lambda i: i[0]) # sort by name
by_area_list.sort(key=lambda i: i[1]) # sort by area
for k in xrange(len(by_name_list)):
country_name = by_name_list[k][0]
if by_area_list[k][0] == country_name:
print 'Same order: %s in position %d'%(country_name, k)https://stackoverflow.com/questions/33747854
复制相似问题