python: 多属性排序

多级排序实现接口

即每个list中越靠前的属性优先级越大。按优先级从小到大实现多属性排序:

def multi_attribute_sort(lists):
    # 输入检查
    assert isinstance(lists, list)

    # 单属性返回
    first_ele = lambda s: s[0]
    second_ele = lambda s: s[1]
    last_ele = lambda s: s[-1]

    # 依次按每个单属性进行排序
    a = sorted(lists, key = last_ele)
    b = sorted(a, key = second_ele)
    c = sorted(b, key = first_ele)

    # 输出最终排序结果
    return c

实验代码

lists = [[15, 20, 40],
         [10, 20, 30],
         [90, 17, 25],
         [10, 24, 30],
         [10, 20, 60],
         [18, 20, 30],
         [10, 20, 90],
         [41, 22, 14]]

def multi_attribute_sort(lists):
    # 输入检查
    assert isinstance(lists, list)
    # 单属性返回
    first_ele = lambda s: s[0]
    second_ele = lambda s: s[1]
    last_ele = lambda s: s[-1]
    # 依次按每个单属性进行排序
    a = sorted(lists, key = last_ele)
    b = sorted(a, key = second_ele)
    c = sorted(b, key = first_ele)
    # 输出最终排序结果
    return c

lists_sorted = multi_attribute_sort(lists)

for line in lists_sorted:
    print(line)

打印结果:

[10, 20, 30]
[10, 20, 60]
[10, 20, 90]
[10, 24, 30]
[15, 20, 40]
[18, 20, 30]
[41, 22, 14]
[90, 17, 25]


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值