zoukankan      html  css  js  c++  java
  • Python中高阶函数sorted()用法

    在Python中,有内置的排序方法:sorted(iterable, key, reverse)。

    Sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序。key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序。

    print(sorted([1,34,-5,55,-100,12]))

    直接像上面对数字进行的排序,得到的结果为下面:

    [-100, -5, 1, 12, 34, 55]

    这是对简单的排序,但是如果按照绝对值进行排序,就可以利用key

    print(sorted([1,34,-5,55,-100,12],key=abs))

    加上key,按照绝对值进行排序,得到的结果如下所示:

    [1, -5, 12, 34, 55, -100]

    这是对key的简单利用,当然我们还能够自己定义函数来排序。

    def ad(x):
        return x*(-1)
    print(sorted([1,34,-5,55,-100,12],key=ad))

    如上定义了一个函数ad(),这个函数就是取反,按照取反之后的结果进行排序,得到下面的结果:

    [55, 34, 12, 1, -5, -100]

    这也是对key的简单运用,通过自己定义函数的方法。

    sorted()除了对纯数字进行排序以外,还能够对字符串进行排序,按照ASCII的顺序进行排序

    print(sorted(['as','xp','junjun','XX','zp','www','+']))
    print(sorted(['as','xp','junjun','XX','zp','www','+'],key=str.lower))
    print(sorted(['as','xp','junjun','XX','zp','www','+'],key=str.lower,reverse=True))

    如上为对字符串进行排序,如下为结果:

    ['+', 'XX', 'as', 'junjun', 'www', 'xp', 'zp']
    ['+', 'as', 'junjun', 'www', 'xp', 'XX', 'zp']
    ['zp', 'XX', 'xp', 'www', 'junjun', 'as', '+']

    通过对比,可以发现,先特殊字符,再大写字母,再小写字母。如果加上key=str.lower来排序,所排序出来的字符串不区分大小写。若加上reverse=True,则是按照相反的顺序来排序。

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

      L = [('Bob',75),('Adam',92),('Xp',100),('Junjun',1)]

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

    #按照名字排序
    def by_name(t):
        return t[0].lower()
    #按照成绩排序
    def by_score(t):
        return t[1]
    
    L = [('Bob',75),('Adam',92),('Xp',100),('Junjun',1)]
    L2 = sorted(L, key = by_name)
    print(L2)
    L3 = sorted(L, key = by_score)
    print(L3)

    上面练习的结果为:

    [('Adam', 92), ('Bob', 75), ('Junjun', 1), ('Xp', 100)]
    [('Junjun', 1), ('Bob', 75), ('Adam', 92), ('Xp', 100)]

    【分析】 
    L列表中的每个元素都是一个元组,首先按名字排序,key作用与排序中列表里的每一个元素,所以传入by_name里的参数t是一个元组,需要对元组的第一个元素进行排序,所以是t[0]。所以说他[0]就是元组的第一个字段name,而相应的t[1]就是元组的第二个字段score。 

    yian
  • 相关阅读:
    Python面试题目--汇总
    MySQL索引背后的数据结构及算法原理
    Python中的str与unicode处理方法
    消息队列 RabbitMQ
    python采用pika库使用rabbitmq总结,多篇笔记和示例
    SQL总结(一)基本查询
    【IT笔试面试题整理】判断一个树是否是另一个的子树
    【IT笔试面试题整理】有序数组生成最小高度二叉树
    【IT笔试面试题整理】给定二叉树,给每层生成一个链表
    【IT笔试面试题整理】位操作
  • 原文地址:https://www.cnblogs.com/xiangpeng/p/8251948.html
Copyright © 2011-2022 走看看