• 列表的sort()和sorted()方法


    sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

    sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

    注:sorted不是列表方法。

    1.sort()方法

    sort函数的原型

      sort(key=None, reverse=False)

      key 可指定一些规则,可以是k=int, k =len , k=function函数

      reverse 默认值是False

      可以给它赋值成True,那就是反向排序

    简单的列表排序
    
    l = [1,7,4,9,2,3,5,0,8,6]
    l.sort()
    print(l)
    结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    #类表中嵌套其他数据类型,如字典
    
    # a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}]
    # 根据字典的key值id进行降序排序并输出排序后的列表。
    
    def function(date):
        print(date)
        print(date['id'])
        return date['id']
    a.sort(key=function)
    print(a)
    #结果:[{'id': 1, 'name': '小明'}, {'id': 2, 'name': '老王'}, {'id': 3, 'name': '小红'}]
    
    
    ##################简化版#################
    
    a.sort(key=lambda keys: keys['id'])
    print(a)
    
    
    s = sorted(a, key=lambda keys: keys['id'])
    print(s)

    按照字符串排序

    StrList = ['fb', 'bx', 'csw', 'qb', 'qqa', 'eeeed']
    # 一般字典序排列,但是大写在前,小写在后!!
    StrList.sort()
    print(StrList) ##字符串列表是按照第一个字符的大小排序的
    ##输出:['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']
    
    #忽略大小写,按abcd顺序
    StrList.sort(key=str.lower)
    print(StrList) ##输出:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth']
    
    #按照字符串长度排序
    StrList.sort(key=len)
    print(StrList)##输出:['is', 'is', 'fast', 'Fast', 'Smooth', 'smooth']
    
    StrList.sort(key=len, reverse=True)#反序
    print(StrList) ##输出:['Smooth', 'smooth', 'fast', 'Fast', 'is', 'is']

    eg:

    假设用元组保存每一个学生的信息,包括学号,姓名,年龄。用列表保存所有学生的信息。
     list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
     list1.sort()
    list1
    [(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
    
     list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
     sorted(list1)
    [(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
     list1
    [(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
    
    小结:
    由示例可以看出,当列表由list(或者tuple)组成时,默认情况下,sort和sorted都会根据list[0](或者tuple[0])作为排序的key,进行排序。
    以上都是默认的排序方式,我们可以编写代码控制两个函数的排序行为。主要有三种方式:基于key函数;基于cmp函数和基于reverse函数
    

      

    2.sorted()方法

      返回一个新列表,其中包含按升序排列的iterable中的所有项。可以提供自定义键函数来自定义排序顺序,以及可以将反转标志设置为按降序请求结果。

    *****

     sorted(L)返回一个排序后的L,不改变原始的L;

    L.sort()是对原始的L进行操作,调用后原始的L会改变,没有返回值。【所以a = a.sort()是错的啦!a = sorted(a)才对!

    sorted()适用于任何可迭代容器,list.sort()仅支持list(本身就是list的一个方法)

    *****

    # a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}]
    # 根据字典的key值id进行降序排序并输出排序后的列表。
    
    a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}]
    
    s=sorted(a, key=lambda keys: keys['id'])
    print(s)
    print(a)
    
    对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。
    
    对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。
    

      

  • 相关阅读:
    hdu4725 The Shortest Path in Nya Graph
    poj2679 Adventurous Driving 最短路
    线段树完全版【代码集合
    LCS!LCS!
    bzoj2763: [JLOI2011]飞行路线
    bzoj3389: [Usaco2004 Dec]Cleaning Shifts安排值班
    [ 浙江大学 数据库系统原理 ] [ MiniSQL ]课程设计
    [ 浙江大学 程序设计专题 ] 四个专题代码 报告 PPT共享
    [ C语言 ] 迷宫 迷宫生成器 [ 递归与搜索 ]
    [ C语言版 ] 数独计算器 [ 搜索剪枝法 ]
  • 原文地址:https://www.cnblogs.com/mainstream/p/11543558.html
Copyright © 2020-2023  润新知