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]


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

JavaScript之面向对象学习五(JS原生引用类型Array、Object、String等等)的原型对象介绍

1、原型模式的重要性不仅仅体现在创建自定义类型方面,就连所有的原生的引用类型(Obejct、Array、String等等)都在构造函数的原型上定义方法和属性。如...

217100
来自专栏calmound

javascript闭包

## 定义 **闭包:**有权访问另一个函数作用域中的变量的函数。 ## 解析 相信刚看到这个定义,很多人肯定很迷糊,现在给出示例。 ``` function ...

29070
来自专栏风中追风

==和equals的区别

==比较的是内存地址,equals方法在object里源代码也是用==来比较,比较的也是内存地址;

32770
来自专栏尚国

PHP反序列化漏洞

这里你可以看到, 我代码里的类定义为: class F, 这个序列化就是 F, 我定义变量名字是filename, 它这里也是 filename, 我们可以修改...

11720
来自专栏用户2442861的专栏

C++ STL空间配置源码分析以及实现二

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

10520
来自专栏MelonTeam专栏

Fork/Join 框架

1. 简介 1.1 什么是Fork/Join框架 Java 5 引入了 Executor 和 ExecutorService 接口,使得 Java在并发支持...

22260
来自专栏九彩拼盘的叨叨叨

JS模式 之通用模式(译)

原文 http://shichuan.github.io/javascript-patterns/

11230
来自专栏大闲人柴毛毛

Java基础深入解析——类与对象

成员变量与局部变量的区别 1.成员变量定义在类中,整个类中都能够访问。   局部变量定义在局部代码块中,只能在局部代码块中访问。 2.成员变量存在于堆内存中,有...

33770
来自专栏程序员互动联盟

【Java基础】Java语言中的流程控制

前言: 上一篇文章写了面向对象的基础知识,接下来就开始写真正的代码了。逻辑判断和控制流程是编码中最小的逻辑单元,是整体逻辑的基石,所以每一个写代码的对于这一块...

38550
来自专栏GreenLeaves

JS框架设计之对象扩展一种子模块

对象扩展 说完了,对象的创建(框架的命名空间的创建)以及如何解决多库之间的命名空间冲突问题之后,接下来,就是要扩展我们的对象,来对框架进行扩展,我们需要一种新功...

23990

扫码关注云+社区

领取腾讯云代金券