题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

from functools import cmp_to_key


def infosSortCmpS2B(a, b):
    if a["Point"] == b["Point"]:
        return -1 if a["No"] < b["No"] else 1
    else:
        return -1 if a["Point"] < b["Point"] else 1


def infosSortCmpB2S(a, b):
    if a["Point"] == b["Point"]:
        return -1 if a["No"] < b["No"] else 1
    else:
        return -1 if a["Point"] > b["Point"] else 1


if __name__ == "__main__":
    n = int(input())
    sortMode = int(input())

    stuInfoList = list()

    for i in range(n):
        infoStrList = list(str(input()).split(" "))
        nowStuInfo = {
            "Name": infoStrList[0],
            "Point": int(infoStrList[1]),
            "No": i,
        }
        stuInfoList.append(nowStuInfo)

    if sortMode == 0:
        stuInfoList = sorted(stuInfoList, key=cmp_to_key(infosSortCmpB2S))
    else:
        stuInfoList = sorted(stuInfoList, key=cmp_to_key(infosSortCmpS2B))


    for i in stuInfoList:
        print(i["Name"], i["Point"])

小排一手序即可,注意 cmp\_to\_key 所需要的自定义比较函数的返回值。

具体来说:

  • -1:表示 a 应该排在 b 之前。
  • 1:表示 a 应该排在 b 之后。
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务