zoukankan      html  css  js  c++  java
  • Python sort()和sorted()

    Python sort()和sorted()

    sort 与 sorted 区别:

    sort()

    sort()是列表list的方法之一

    L.sort(key=None, reverse=False)
    

    sorted()

    sorted() 函数可以对任意可迭代对象排序。返回一个列表

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

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

    # sorted()语法
    sorted(iterable[, cmp[, key[, reverse]]])
    

    参数说明:

    • iterable -- 可迭代对象
    • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0
    • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序
    • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)

    单个排序法则:

    students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    new_students = sorted(students, key=lambda s: s[2])
    print(new_students)  # [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    

    多种排序法则:

    s = 'asdf234GDSdsf234578'  # 排序:小写-大写-奇数-偶数
    new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x]))
    print(new_s1)  # addffssDGS335722448
    

    原理:

    print(sorted([True, False]))  # [False, True]
    # Boolean 的排序会将 False 排在前,True排在后  
    
    1. x.isdigit()的作用把iterable分成两部分,数字和非数字,数字在后,非数字在前

      new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit()]))
      print(new_s1)  # asdfGDSdsf234234578
      
    2. x.isdigit() and int(x) % 2 == 0的作用是将数字部分分成两部分,偶数(在后)和奇数(在前)

      new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0]))
      print(new_s1)  # asdfGDSdsf335724248
      
    3. x.isupper()的作用是在前面基础上,保证字母小写在前大写在后

      new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper()]))
      print(new_s1)  # asdfdsfGDS335724248
      
    4. 最后的x表示在前面基础上,对所有类别数字或字母排序

      new_s1 = "".join(sorted(s, key=lambda x: [x.isdigit(), x.isdigit() and int(x) % 2 == 0, x.isupper(), x]))
      print(new_s1)  # addffssDGS335722448
      

    一道面试题

    lst = [7, -8, 5, 4, 0, -2, -5]

    要求:

    1. 正数在前负数在后
    2. 正数从小到大
    3. 负数从大到小
    lst = [7, -8, 5, 4, 0, -2, -5]
    new_lst1 = sorted(lst, key=lambda x: [x < 0, x < 0 and -x, x >= 0 and x])  # -3 < 0 and -(-3) ==> 3
    new_lst2 = sorted(lst, key=lambda x: [x < 0, abs(x)])
    print(new_lst1)  # [0, 4, 5, 7, -2, -5, -8]
    print(new_lst2)  # [0, 4, 5, 7, -2, -5, -8]
    
  • 相关阅读:
    BZOJ 3132: 上帝造题的七分钟 树状数组+差分
    PAT Advanced 1006 Sign In and Sign Out (25 分)
    PAT Advanced 1011 World Cup Betting (20 分)
    PAT Basic 1032 挖掘机技术哪家强 (20 分)
    PAT Basic 1028 人口普查 (20 分)
    PAT Basic 1004 成绩排名 (20 分)
    大数据数据库HBase(二)——搭建与JavaAPI
    PAT Advanced 1009 Product of Polynomials (25 分)(vector删除元素用的是erase)
    PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
    PAT Basic 1041 考试座位号 (15 分)
  • 原文地址:https://www.cnblogs.com/pankypan/p/11074372.html
Copyright © 2011-2022 走看看