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]
    
  • 相关阅读:
    PAT Basic 1077 互评成绩计算 (20 分)
    PAT Basic 1055 集体照 (25 分)
    PAT Basic 1059 C语言竞赛 (20 分)
    PAT Basic 1072 开学寄语 (20 分)
    PAT Basic 1049 数列的片段和 (20 分)
    蓝桥杯BASIC-13 数列排序
    蓝桥杯入门——3.序列求和
    蓝桥杯入门——2.圆的面积
    蓝桥杯入门——1.Fibonacci数列
    树的总结(遍历,BST,AVL原型,堆,练习题)
  • 原文地址:https://www.cnblogs.com/pankypan/p/11074372.html
Copyright © 2011-2022 走看看