zoukankan      html  css  js  c++  java
  • sort和sorted区别----引子:多维列表,如何实现第一个元素升序,第二个元素降序

    一、列表内建方法--sort()

    作用就地对列表排序(直接在原列表上做排序)

    语法

      list.sort(func=None, key=None, reverse=False)

    • 当reverse=False时:正向排序;当reverse=True时:逆向排序。默认为False。
    • 执行完后会改变原来的list,如果你不需要原来的list,这种效率稍微高点
    • 该方法没有返回值

    例子

    >>> arr = [2,8,4,6,9,1,3]
    >>> arr.sort()
    >>> arr
    [1, 2, 3, 4, 6, 8, 9]
    

      

    二、内建函数sorted()

    作用:对可迭代对象排序,返回一个新的已经排序好的list

    差别:

    • sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
    • list.sort()方法只是应用在 list 上的方法,而sorted()可用于任何一个可迭代对象

    语法:

      sorted(iterable, key=None, reverse=False)

    • 当reverse=False时:为正向排序;当reverse=True时:为反向排序。默认为False。
    • 执行完后返回一个新的排序好的list

    例子

    >>> arr = (3,6,7,2,1,4)
    >>> sorted(arr)
    [1, 2, 3, 4, 6, 7]

    三、高级用法

    参数key:

    参数key:带一个参数的函数(排序时,会依次传入列表的每一项,作为该函数的参数)。该函数用于在比较排序之前进行的操作

    例子:

    每个字符串比较之前,需要统一小写

    >>> test=["A","a","E","W","o"]
    >>> test.sort()
    >>> test
    ['A', 'E', 'W', 'a', 'o']
    >>> test.sort(key=lambda x:x.lower())
    >>> test
    ['A', 'a', 'E', 'o', 'W']

    对于复杂的对象,使用对象的下标作为key。

    例子:

    >>> student_tuples = [
    ...     ('john', 'A', 15),
    ...     ('jane', 'B', 12),
    ...     ('dave', 'B', 10),
    ... ]
    >>> sorted(student_tuples, key=lambda student: student[2])   # sort by age
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    使用对象的属性进行操作:

    >>> class Student:
    ...     def __init__(self, name, grade, age):
    ...         self.name = name
    ...         self.grade = grade
    ...         self.age = age
    ...     def __repr__(self):
    ...         return repr((self.name, self.grade, self.age))
    >>>
    >>> student_objects = [
    ...     Student('john', 'A', 15),
    ...     Student('jane', 'B', 12),
    ...     Student('dave', 'B', 10),
    ... ]
    >>> sorted(student_objects, key=lambda student: student.age)   # sort by age
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

    重点来了!

    1.多维数组,如何在按照第一个元素排序的基础上,再按第二个关键字进行排序?

    >>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
    >>> sorted(arr, key = lambda x:(x[0],x[1]))
    [('a', 5), ('c', 2), ('d', 1), ('d', 2), ('d', 3)]

    2.多维数组,如何实现第一个元素按升序,第二个元素按降序来排列?

    >>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
    >>> sorted(arr, key=lambda x:(x[0], -int(x[1])))
    [('a', 5), ('c', 2), ('d', 3), ('d', 2), ('d', 1)]

  • 相关阅读:
    ruby 二进制转十进制 Integer("0b101") = 5
    开始菜单和我的文档的我的图片及我的音乐变成 my pictrues 正常图标了
    ruby watir 莫名其妙的错误
    Excel SaveAS是去掉提示框
    apache && jboss安装
    ruby require include的区别
    ruby控制鼠标
    This error is raised because the column 'type' is reserved for storing the class in case of inheritance
    用正则表达式限制文本框只能输入数字,小数点,英文字母,汉字等各类代码
    ASP.NET 如何动态修改 Header 属性如添加 Meta 标签 keywords description!
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/11134553.html
Copyright © 2011-2022 走看看