zoukankan      html  css  js  c++  java
  • Python学习札记(二十三) 函数式编程4 sorted

    参考:sorted

    NOTE

    1.sorted,快速排序,时间复杂度O(nlogn)渐进最优.

    #!/usr/bin/env python3
    
    L = []
    
    for i in range(10):
    	L.append(int(input()))
    
    SortedL = sorted(L)
    
    print(SortedL)
    
    

    上例:sorted函数返回排序好的list。

    sh-3.2# ./sorted1.py 
    -10
    2
    99
    78
    24
    -100
    92
    33
    12
    63
    [-100, -10, 2, 12, 24, 33, 63, 78, 92, 99]
    

    2.Python的sorted函数支持传入特定的函数,先将该函数作用于所有的列表元素,再进行排序。注意,该函数是用于比较大小的依据。

    absortL = sorted(L, key=abs)
    
    print(absortL)
    
    
    -10
    2
    99
    78
    24
    -100
    92
    33
    12
    63
    [2, -10, 12, 24, 33, 63, 78, 92, 99, -100]
    

    eg.

    list = [36, 5, -12, 9, -21]
    
    keys = [36, 5,  12, 9,  21]
    
    keys排序结果 => [5, 9,  12,  21, 36]
                    |  |    |    |   |
    最终结果     => [5, 9, -12, -21, 36]
    

    3.默认情况下,对字符串排序,是按照ASCII的大小比较的.

    L1 = []
    
    for i in range(5):
    	L1.append(input())
    
    print(sorted(L1))
    
    
    Chen
    Michael
    Xu
    Li
    Wang
    ['Chen', 'Li', 'Michael', 'Wang', 'Xu']
    

    实现忽略大小写的排序(借助lower()函数将所有字符串变为小写再比较):

    print(sorted(L1, key=str.lower))
    
    chen
    Li
    Xu
    Wang
    michael
    ['chen', 'Li', 'michael', 'Wang', 'Xu']
    

    4.要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:

    chen
    Li
    Xu
    Wang
    michael
    ['chen', 'Li', 'michael', 'Wang', 'Xu']
    ['Xu', 'Wang', 'michael', 'Li', 'chen']
    
    print(sorted(L1, key=str.lower, reverse=True))
    

    5.使用sorted函数的关键在于key函数的实现,本质上key函数不同于C语言中的cmp函数,也就是说它不是比较型函数(返回bool),事实上key函数是将传入的参数(待排序的元素)进行某种转换并返回结果。sorted函数通过key函数将其元素逐一进行映射,并根据映射得到的序列进行排序,最后依据得到的序列对原有序列进行排序。

    Practice

    假设我们用一组tuple表示学生名字和成绩:

    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    

    请用sorted()对上述列表分别按名字排序:

    #!/usr/bin/env python3
    
    L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
    
    def by_name(t):
    	return t[1]
    
    L2 = sorted(L, key=by_name)
    print(L2)
    
    sh-3.2# ./sorted2.py 
    [('Bart', 66), ('Bob', 75), ('Lisa', 88), ('Adam', 92)]
    

    2017/2/16

  • 相关阅读:
    【windows 10 安装docker for windows】
    【windows本地修改git账号、路径信息】
    【echarts】简单使用流程(java)
    【MySql】explain
    【thymeleaf-标签】th:with
    【MongoDB】Windows:安装与启动
    【thymeleaf-标签】th:if
    Thread类中interrupt()、interrupted()和isInterrupted()方法详解
    java中的锁
    LinkedList集合详解
  • 原文地址:https://www.cnblogs.com/qq952693358/p/6407564.html
Copyright © 2011-2022 走看看