[英]Python: I need to sort this list in descending order
我的代码在很大程度上是有效的,不断地询问用户输入,直到他们输入一个空行,然后将所述输入排序到一个列表中,以便进一步排序。 我的问题是我打算先按字母顺序对列表进行排序,然后按从最高到最低的分数对其进行排序。 按字母顺序排列的程序工作得很好。 但是,当我尝试为排序的分数列表复制和调整它时,它不起作用。 这是排序名称程序:
def sortListName(aList):
sortEm = aList[:]
for x in range(len(sortEm)):
for y in range(len(sortEm) - 1):
if (sortEm[y][0].lower() > sortEm[y + 1][0].lower()):
sortEm[y], sortEm[y + 1] = sortEm[y + 1], sortEm[y]
return sortEm
这是分数的调整版本:
def sortListScore(aList):
sortMe = aList[:]
for x in range(len(sortMe)):
for y in range(len(sortMe) - 1):
if (sortMe[y][1] > sortMe[y + 1][1]):
sortMe[y], sortMe[y + 1] = sortMe[y + 1], sortMe[y]
return sortMe
它从中提取的列表如下所示:
[['Steven', '172'], ['Jamie', '234'], ['Michael', '256'], ['Alice', '300'], ['Trevor', '93']]
预期 Output:
[['Alice', '300'], ['Michael', '256'], ['Jamie', '234'], ['Steven', '172'], ['Trevor', '93']]
我只需要知道我做错了什么以及我打算如何修复它,而不需要对程序进行太多改动。 非常感谢任何帮助。
你可以使用sorted
:
按分数
降序: sorted(a,key=lambda l:int(l[1]), reverse=True)
升序: sorted(a,key=lambda l:int(l[1]))
按名称
降序: sorted(a,key=lambda l:l[0], reverse=True)
升序: sorted(a,key=lambda l:l[0])
这是您查询的解决方案
aList=[['Steven', '172'], ['Jamie', '234'], ['Michael', '256'], ['Alice', '300'],
['Trevor', '93']]
def sortListScore(aList):
score=[]
for item in aList:
score.append(int(item[-1]))
score.sort()
sorted_list=[]
for i in range(len(score)):
for a in aList:
if(score[i]==int(a[-1])):
sorted_list.append(a)
print(sorted_list[::-1])
sortListScore(aList)
让我解释一下逻辑:
首先,我将列表中的数字分数附加到另一个列表(比如分数)。 现在我正在对新列表(分数)进行排序。 所以数字分数的顺序是排序的。 接下来,我要找到分数所在的主列表(列表)中的项目,并根据分数对其进行排序。 因为它们是按升序排列的,所以我正在反转字符串并最终得到预期的 output。 这是它的工作原理,
[['Alice', '300'], ['Michael', '256'], ['Jamie', '234'], ['Steven', '172'], ['Trevor', '93']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.