• 列表的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()函数修改待排序的列表内容。
    

      

  • 相关阅读:
    (二分查找 拓展) leetcode 69. Sqrt(x)
    (二分查找 拓展) leetcode 162. Find Peak Element && lintcode 75. Find Peak Element
    (链表) lintcode 219. Insert Node in Sorted Linked List
    (二分查找 拓展) leetcode 34. Find First and Last Position of Element in Sorted Array && lintcode 61. Search for a Range
    (最短路 Floyd) P2910 [USACO08OPEN]寻宝之路Clear And Present Danger 洛谷
    (字符串 数组 递归 双指针) leetcode 344. Reverse String
    (二叉树 DFS 递归) leetcode 112. Path Sum
    (二叉树 DFS 递归) leetcode 101. Symmetric Tree
    (二叉树 递归) leetcode 144. Binary Tree Preorder Traversal
    (二叉树 递归 DFS) leetcode 100. Same Tree
  • 原文地址:https://www.cnblogs.com/mainstream/p/11543558.html
Copyright © 2020-2023  润新知