2

少し前に私はここでこの質問をしました: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

ただし、名前をさらに並べ替える必要もあります。名前の長さが同じである場合は、大文字の名前が最初に来る必要があります。何か案は?

4

1 に答える 1

1

3番目の条件のタプルに別のエントリを追加します。

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

私は個人的に、2番目のアプローチがもう少し読みやすいと思います。

于 2012-08-13T21:58:35.857 に答える