zoukankan      html  css  js  c++  java
  • python高阶函数——sorted排序算法

    python 内置的sorted()函数可以对一个list进行排序:

    >>> sorted([8,3,8,11,-2])
    [-2, 3, 8, 8, 11]

    既然说是高阶函数,那么它还可以接受一个key函数来实现自定义的排序,比如按照绝对值大小进行排序:

    >>> sorted([8,3,8,11,-9],key=abs)
    [3, 8, 8, -9, 11]

    key指定的函数将作用于list中的每一个元素上,根据key函数返回的结果进行排序。

    来看看字符串排序的问题:

    >>> sorted(['abc','Abc','Cba','bAc'])
    ['Abc', 'Cba', 'abc', 'bAc']

    默认的,对于字符串,sorted函数按照ASCII的大小进行排序,因为C<a,大写的C会排在小写的a前面。

    如果我们想要达到忽略大小写的排序,只需要更改一下key函数:

    >>> sorted(['abc','Abc','Cba','bAc'],key=str.lower)
    ['abc', 'Abc', 'bAc', 'Cba']

    进一步,要进行反向排序,可以传入第三个参数reverse=True:

    >>> sorted(['abc','Abc','Cba','bAc'],key=str.lower,reverse=True)
    ['Cba', 'bAc', 'abc', 'Abc']

    sorted()排序的关键在于实现一个映射函数!

    练习:一个tuple表示学生的名字和成绩,使用sorted()对这个元祖按照名字排序:

    >>> l = [('xiamin',34),('qiang',66),('hong',74),('guan',56)]
    >>> def by_name(t):
    ...     return t[0]
    ...
    >>> def by_score(t):
    ...     return t[1]
    ...
    >>> l1 = sorted(l,key=by_name)
    >>> l1
    [('guan', 56), ('hong', 74), ('qiang', 66), ('xiamin', 34)]
    >>> l2 = sorted(l,key = by_score)
    >>> l2
    [('xiamin', 34), ('guan', 56), ('qiang', 66), ('hong', 74)]
  • 相关阅读:
    系统调用简单总结
    系统调用原理详解
    总结:c 语言与Linux操作系统的关系
    poj3171 Cleaning Shifts
    洛谷P1032 字串变换
    poj3662 Telephone Lines
    洛谷P1073 最优贸易
    Uva1330/poj1964 City Game
    poj2559/SP1805 Largest Rectangle in a Histogram
    洛谷 P1196 [NOI2002]银河英雄传说
  • 原文地址:https://www.cnblogs.com/hiwuchong/p/8095056.html
Copyright © 2011-2022 走看看