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)]

  • 相关阅读:
    request和response概念用法
    servlet知识点
    Nginx的安装和配置文件详细说明
    Tomcat优化
    Tomcat安装和常见问题
    WEB服务器和tomcat介绍
    WEB技术相关入门知识点
    前期绑定和后期绑定
    1-4选择题
    1-3选择题
  • 原文地址:https://www.cnblogs.com/liangmingshen/p/11134553.html
Copyright © 2011-2022 走看看