• python内建函数sorted方法概述


    python中,具体到对list进行排序的方法有俩,一个是list自带的sort方法,这个是直接对list进行操作,只有list才包含的方法;另外一个是内建函数sorted方法,可以对所有可迭代的对象进行排序操作,在本质上,list的排序和内建函数sorted的排序是差不多的,连参数都基本上是一样的。


    主要的区别在于,list的sort方法返回的是对已经存在的列表进行操作,而内建函数sorted方法返回的是一个新的list,而不是在原来的基础上进行的操作。


    sorted语法如下:

    sorted(...)
        sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
    可以看到其中第一个参数是可迭代对象,后面的参数都是具有默认值的,重点阐述如下:

    1、cmp,比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0

    2、key,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序

    3、reverse,是否反转,默认情况下不反转


    具体的例子如下:

    使用cmp参数:

    def cmp_value(x,y):
        if x > y :
            return 1
        elif x < y:
            return -1
        else:
            return 0
    so = sorted('this is a string'.split(' '),cmp=cmp_value)
    print so

    输出结果为:

    ['a', 'is', 'string', 'this']


    使用key参数:

    so = sorted('this Is a string'.split(' '),key=str.upper)
    print so
    
    so = sorted('This is a string'.split(' '),key=lambda x:x.lower)
    print so
    
    student = [('kel','C',30),('jun','A',25)]
    so = sorted(student,key=lambda x:x[2])
    print so

    输出结果为:

    ['a', 'Is', 'string', 'this']
    ['is', 'string', 'This', 'a']

    key参数用的比较多,多用来使用的方式为key-function,来对list数据进行处理


    对复杂对象进行比较:

    student = [('kel','C',30),('jun','A',25)]
    so = sorted(student,key=lambda x:x[2])
    print so
    
    class Student(object):
        def __init__(self,name,score,age):
            self.name = name
            self.score = score
            self.age = age
        def __repr__(self):
            return repr((self.name,self.score,self.age))
    student_some = [Student('kel','B',35),Student('jun','C',30)]
    print sorted(student_some,key= lambda x :x.age)
    输出结果为:

    [('jun', 'A', 25), ('kel', 'C', 30)]
    [('jun', 'C', 30), ('kel', 'B', 35)]

    在对复杂对象进行比较的时候,注意其中参数的引用,在list对象中,直接用index来进行应用;在对象的时候,必须使用对象的属性来进行应用,如x.age


    另外一个使用key的好处是,可以进行分组进行统计,配合使用itertools的groupby方法,代码如下:

    import itertools
    class Kel(object): #定一个对象,用名字和年龄来进行初始化
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def __repr__(self):
            return repr((self.name,self.age))
    kel = [Kel('kel',25),Kel('jun',32),Kel('no',22),Kel('other',40)] #构造一个list
    
    
    #比较年龄的大小,从而得出不同的年龄群体
    def get_age(age):
        if age.age < 20:
            return 'small'
        elif age.age < 30:
            return 'middle'
        else:
            return 'old'
    kel_list = sorted(kel,key=get_age) #首先用年龄来进行排序
    print kel_list
    for m,n in itertools.groupby(kel_list,key=get_age): #根据年龄来统计各个层次段的数据
        print m
        print list(n)


    以上代码为根据年龄来统计年龄段的层次结果,输出结果如下:

    middle
    [('kel', 25), ('no', 22)]
    old
    [('jun', 32), ('other', 40)]







    for linux and python
  • 相关阅读:
    现代3D图形编程学习-关于本书
    极简单之爬虫入门
    前端学HTTP之网络基础
    用canvas 实现个图片三角化(LOW POLY)效果
    移动前端—图片压缩上传实践
    nodejs实现Websocket的数据接收发送
    nodejs学习之实现简易路由
    nodejs学习之实现http数据转发
    canvas粒子demo
    nodejs简易实现一下bigpipe
  • 原文地址:https://www.cnblogs.com/kellyseeme/p/5525052.html
Copyright © 2020-2023  润新知