• sort/sorted排序


    sort

    列表.sort(key=None,reverse=False) 直接修改该列表,返回None,效率高,但是仅仅只能用于列表

    参数 key: 遍历列表所有的元素 作为参数传递给该函数,对调用该函数所返回的结果 进行排序,然后排序后的列表 只是对原始列表排序,这里函数处理所返回的值 并不会改变列表,只是作为排序的参考,这里的函数不加括号 如: str.lower

    参数 reverse: 表示正序or倒序 默认为False 正序

    # 直接在原列表上修改
    li = [2,1,9,7]
    li.sort()
    print(li) #[1, 2, 7, 9]
    
    #倒序
    li = [2,1,9,7]
    li.sort(reverse=True)
    print(li) #[9, 7, 2, 1]
    
    #使用key,不区分大小写排序
    li = ['a','A','b','B']
    li.sort()
    print(li)  # ['A', 'B', 'a', 'b']  大写在前
    
    li = ['a','A','b','B']
    li.sort(key=str.lower)
    print(li) # ['a', 'A', 'b', 'B'] 排序是稳定的——如果两个项具有相同的键,它们的顺序将保留在排序列表中   就是上述a A  列表中的每个元素都经过str.lower(元素) 后进行比较,a A 是一样的小写的a,原来小写的a在前面,所以排序后 也在前面
    
    # 测试 排序的稳定性
    li = ['A','a','b','B']  # 大写的A 在小写的a 前面
    li.sort(key=str.lower)
    print(li) # ['A', 'a', 'b', 'B']
    

    sorted

    同sort,但是可以作用于所有可迭代对象,并且不会直接修改原对象,是返回的一个新的列表,对所有可迭代对象排序 返回的都是列表

    # 列表,返回一些新的列表
    li = [3,5,2,1,0]
    new_li = sorted(li)
    print(new_li) # [0, 1, 2, 3, 5]
    
    #元祖    返回列表
    tup = ('a','A','aa','z','bb')
    new_tup = sorted(tup,reverse=True)
    print(new_tup) #['z', 'bb', 'aa', 'a', 'A']
    
    #集合   返回列表
    set1 = {2,3,9,1}
    new_set = sorted(set1)
    print(new_set) #[1, 2, 3, 9]
    
    #字典: 对键 进行排序,并且返回列表
    dic = {9:'hello',8:'hi',0:'mello'}
    new_dic = sorted(dic)
    print(new_dic) #[0, 8, 9]
    
    
    

    根据自定义对象的某些属性进行排序

    # 场景,根据学生的年龄排序
    class Student:
        def __init__(self,name,sex,age,grade) -> None:
            self.name = name
            self.sex = sex
            self.age = age
            self.grade = grade
        
        def __repr__(self):
            return repr((self.name,self.sex,self.age,self.grade))
    
        # def __str__(self):
        #     return '这是__str__方法,优先级大于__repr__'
    
    li = [
        Student('张三','m',18,60),
        Student('李四','m',19,90),
        Student('王五','m',17,80),
        Student('赵六','F',18,100),
    ]
    
    new_li  = sorted(li,key=lambda stu_ins:stu_ins.age)
    print(new_li)
    #[('王五', 'm', 17, 80), ('张三', 'm', 18, 60), ('赵六', 'F', 18, 100), ('李四', 'm', 19, 90)]
    
    

    对于上述的这种 键函数 很常见,所有有如下函数更加便利

    from operator import itemgetter,attrgetter,methodcaller
    

    attrgetter

    #根据年龄排序,和上述的lambda 两者效果一样    attrgetter
    new_li2 = sorted(li,key=attrgetter('age'))
    print(new_li2)
    
    #先根据年龄,再根据性成绩排序
    new_li = sorted(li,key=attrgetter('age','grade'))
    print(new_li)
    

    itemgetter

    #根据字符串的最后一个字母排序   itemgetter
    li = ['adc','d','AP','ZL']
    new_li = sorted(li, key=itemgetter(-1))
    print(new_li)
    # ['ZL', 'AP', 'adc', 'd']
    

    methodcaller

    #不区分大小写排序       methodcaller 必须接一个函数名字符串
    li = ['adc','d','AP','ZL']
    new_li = sorted(li,key=methodcaller('lower'))
    print(new_li) 
    # ['adc', 'AP', 'd', 'ZL']
    
  • 相关阅读:
    ASPJSPNET 清空IE缓存
    asp.net __doPostBack详细解释,用法示例
    httpModules与httpHandlers
    mssql中的标量值函数和表函数的用法
    SQL利用Case When Then多条件判断
    .net发送邮件
    Cookie总结
    asp.net中web.config配置节点大全详解
    Java中打印输出
    Java中new关键字创建对象
  • 原文地址:https://www.cnblogs.com/alantammm/p/15494347.html
Copyright © 2020-2023  润新知