zoukankan      html  css  js  c++  java
  • 排序函数 sort() 和 高阶函数sorted()

    · sorted():该函数第一个参数iterable为任意可以迭代的对象,key是用于比较的关键字,reverse表示排序结果是否反转。

    · L.sort():该函数的三个参数和 sorted() 的后三个参数含义是一致的,而需要特别注意的是,该函数只适用于列表,而非任意可以迭代的对象。

    让我们通过示例看一下:

     

    L.sort()

    A = [3,6,1,5,4,2]
    A.sort()
    print(A)
    #输出:
    
    [1, 2, 3, 4, 5, 6]
    
    #这里需要注意的一点是,调用 L.sort() 完成排序后,改变了要排序的列表的结构, 即排序后A为[1, 2, 3, 4, 5, 6]。
    #我们可以指定关键字排序,比如:
    
    student = [['Tom', 'A', 20], ['Jack', 'C', 18], ['Andy', 'B', 11],['Andy1', 'A', 11]]
    student.sort(key=lambda student: (student[2],student[1]),reverse=True)
    print(student)
    #学生列表中包含列表,每个列表是学生的姓名、成绩以及年龄,排序过程中指定了key为学生的年龄,所以排序的结果为:
    
    #输出:
    [['Tom', 'A', 20], ['Jack', 'C', 18], ['Andy', 'B', 11], ['Andy1', 'A', 11]]
    

    sorted()

    sorted()可以应用于任意的可以迭代的对象,所以应用范围比L.sort() 广泛的多,可以应用于字符串,元组,列表,字典等可迭代对象。

    print("----------------")
    
    B = 'Python'
    S=sorted(B)
    print(S)
    
    print("----------------")
    
    C = (3, 6, 1, 5, 4, 2)
    S=sorted(C)
    print(S)
    print("----------------")
    
    E = {'1': 'a', '2': 'b', '0': 'c'}
    S=sorted(E.items())
    print(S)
    
    #输出:
    
    ----------------
    ['P', 'h', 'n', 'o', 't', 'y']
    
    ----------------
    [1, 2, 3, 4, 5, 6]
    
    ----------------
    [('0', 'c'), ('1', 'a'), ('2', 'b')]
    

    需要注意的是,该函数会返回一个排序后的列表,原有可迭代对象保持不变,这与 L.sort() 函数不同。然而,这会浪费较大的存储空间,尤其是数据量较大时。所以,在列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用L.sort() 节省内存空间,提高效率。

    有的排序可能需要根据两个关键字,常用的比如单词的排序,第一个字母相同然后根据第二个字母排序,Python中的 sorted() 函数是否支持这种实现呢?答案是肯定的,再设置 key 时指定多个属性即可。

    L = ['cat', 'binary', 'big', 'dog']
    print (sorted(L, key=lambda x: (x[0], x[1], x[2])))
    
    #输出:
    
    [('0', 'c'), ('1', 'a'), ('2', 'b')]
    ['big', 'binary', 'cat', 'dog']
    

      

    总结

    · L.sort() 函数只适用于列表排序,而sorted()函数适用于任意可以迭代的对象排序。

    · L.sort() 函数排序会改变原有的待排序列表,而sorted()函数则不会改变。所以在使用列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用L.sort() 节省内存空间,提高效率。

     

  • 相关阅读:
    C语言寒假大作战01
    C语言|博客作业12-学期总结
    第一次作业
    C语言|博客作业11
    C语言|博客作业10
    Centos7上安装 sqlmap 所经历的坑
    软件工程1916|W(福州大学)_助教博客】助教总结
    软件工程1916|W(福州大学)_助教博客】个人总结作业(第12次)成绩公示
    团队作业第五次(第8次)—项目系统设计与数据库设计成绩排名
    需求分析课堂答辩问题汇总
  • 原文地址:https://www.cnblogs.com/Sandy-1128/p/python-sandy-0404-3.html
Copyright © 2011-2022 走看看