繁体   English   中英

Python:我需要按降序排列这个列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM