python3 自定义比较器

摘要:在一些场景中,需要重新对已有的数据排序,可能所给出的数据类型或者数据数量较多,需要给定排序规则。

import functools

def by_score(t1,t2):
    if t1[0]>t2[0]:
        return 1
    elif t1[0]<t2[0]:
        return -1
    else:
        if t1[1]>t2[1]:
            return 1
        elif t1[1]==t2[1]:
            return 0
        else:
            return -1


def md():
    datas=[['Bob', 99,1],['Bart', 66,2],['Bob', 29,3], ['Adam', 92,4],['Bob', 29,5], ['Adam', 90,6], ['Bart', 66,7], ['Lisa', 88,8]]
    datas.sort(key=functools.cmp_to_key(by_score))  # 稳定排序
    print(datas)
    #[['Adam', 90, 6], ['Adam', 92, 4], ['Bart', 66, 2], ['Bart', 66, 7], ['Bob', 29, 3], ['Bob', 29, 5], ['Bob', 99, 1], ['Lisa', 88, 8]]

  
class Pos:
    def __init__(self,x,y):
        self.x=x
        self.y=y


def cmp(a, b):
    return a.x - b.x if a.x != b.x else a.y - b.y  # x y均按照从小到大的顺序


def mySorted():
    test_list = [Pos(5, 1), Pos(2, 5), Pos(2, 4)]
    # test_list.sort(key=functools.cmp_to_key(lambda a,b: a.x-b.x if a.x != b.x else a.y-b.y))
    test_list.sort(key=functools.cmp_to_key(cmp))
    # sorted(test_list, key=functools.cmp_to_key(cmp))  #    亲测此方法不能成功排序
    for number in test_list:
        print(number.x,'  ',number.y)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值