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]
    
  • 相关阅读:
    FIS
    git笔记 常规使用
    隐藏文字
    清除浮动的几种方法
    chrome livestyle插件
    Vue3中的微任务队列解析
    JavaScript通过父节点ID递归生成JSON树
    JavaScripts调用摄像头【MediaDevices.getUserMedia()】
    JavaScripts之变量作用域提升问题
    Webpack之 webpack-dev-server 中的 contentBase配置及作用
  • 原文地址:https://www.cnblogs.com/pankypan/p/11074372.html
Copyright © 2011-2022 走看看