Skip to main content
 首页 » 编程设计

python之按名称和等级排序

2025年05月04日9lori

不久前我在这里问了这个问题:Sorting lists in python

我这里有这段代码:

def sort(names, rank): 
    lst=[] 
    for x in range(0, len(names)): 
        lst.append((int(rank[x]), names[x])) 
    lst.sort(key=lambda x: (-x[0],len(x[1])) ) 
    newArr = [] 
    for z in range(0, len(lst)): 
        row = lst[z] 
        newArr.append(row[1] + " " + str(row[0])) 
    return newArr 

但是我还需要对名字进行更多的排序,如果名字的长度相同我需要大写字母排在第一位。有什么想法吗?

请您参考如下方法:

为第三个条件添加另一个条目到元组中。

def sort(names, rank): 
    lst=[] 
    for x in range(0, len(names)): 
        lst.append((int(rank[x]), names[x])) 
    lst.sort(key=lambda x: (-x[0],len(x[1]), ord(x[1][0])) ) 
    newArr = [] 
    for z in range(0, len(lst)): 
        row = lst[z] 
        newArr.append(row[1] + " " + str(row[0])) 
    return newArr 

我重写了您的代码,进行了一些样式更改:

def sort(names, rank): 
    lst=[] 
    for index, name in enumerate(names): 
        lst.append((int(rank[index]), name)) 
    lst.sort(key=lambda x: (-x[0],len(x[1]),  ord(x[1][0]))) 
    output = [] 
    for row in lst: 
        output.append(row[1] + " " + str(row[0])) 
    return output 

我个人认为第二种方法更具可读性。