zoukankan      html  css  js  c++  java
  • python sort 排序的使用

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明:

    一、基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。

    x = [4, 6, 2, 1, 7, 9]
    x.sort()
    print x # [1, 2, 4, 6, 7, 9] # 默认从小到大排序
    

    如果需要一个排序好的副本,同时保持原有列表不变,怎么实现呢

    x =[4, 6, 2, 1, 7, 9]
    y = x[ : ] # 注意:y = x[:] 通过分片操作将列表x的元素全部拷贝给y,如果简单的把x赋值给y, 即 y = x,y和x还是指向同一个列表,并没有产生新的副本。
    y.sort()
    print y #[1, 2, 4, 6, 7, 9]
    print x #[4, 6, 2, 1, 7, 9]
    

    另一种获取已排序的列表副本的方法是使用sorted函数:

    x =[4, 6, 2, 1, 7, 9]
    y = sorted(x)
    print y #[1, 2, 4, 6, 7, 9]
    print x #[4, 6, 2, 1, 7, 9]
    # sorted返回一个有序的副本,并且类型总是列表,如下:
    # print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
    

    二、自定义比较函数

    可以定义自己的比较函数,然后通过参数传递给sort方法:

    def comp(x, y):
          if x < y:
                return 1
          elif x > y:
                return -1
          else:
                return 0
    
    nums = [3, 2, 8 ,0 , 1]
    nums.sort(comp)
    print nums # 降序排序[8, 3, 2, 1, 0]
    nums.sort(cmp) # 调用内建函数cmp ,升序排序
    print nums # 降序排序[0, 1, 2, 3, 8] 
    

    三、可选参数

    sort方法还有两个可选参数:key和reverse

    1、key在使用时必须提供一个排序过程总调用的函数:

    x = ['mmm', 'mm', 'mm', 'm' ]
    x.sort(key = len)
    print x # ['m', 'mm', 'mm', 'mmm']
    

    2、reverse实现降序排序,需要提供一个布尔值:

    y = [3, 2, 8 ,0 , 1]
    y.sort(reverse = True)
    print y #[8, 3, 2, 1, 0]
    

    在举一个sort的使用例子

    有一个列表lis = [[9,0],[7,0],[1,9],[3,0],[2,7],[5,3],[6,0],[3,4],[6,2],[5,2]]

    那么如何实现 lis的排序按照第一个元素递减,第二个元素递增的排序规则呢?

    lis = [[9,0],[7,0],[1,9],[3,0],[2,7],[5,3],[6,0],[3,4],[6,2],[5,2]]
    lis = sorted(lis, key=lambda x: (-x[0], x[1])) # -x[0]表示列表第一个元素按递减规则,x[1]符号为正, 表示列表第二个元素按递增规则.
    print lis # [[9, 0], [7, 0], [6, 0], [6, 2], [5, 2], [5, 3], [3, 0], [3, 4], [2, 7], [1, 9]]
    
  • 相关阅读:
    Reactive Extensions (Rx) 入门(5) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(4) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(3) —— Rx的事件编程
    Reactive Extensions (Rx) 入门(2) —— 安装 Reactive Extensions
    Reactive Extensions (Rx) 入门(1) —— Reactive Extensions 概要
    Xamarin NuGet 缓存包导致 already added : Landroid/support/annotation/AnimRes 问题解决方案
    Android 系统Action大全
    Xamarin Forms 实现发送通知点击跳转
    如何理解灰度发布
    推荐一款分布式微服务框架 Surging
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/12936864.html
Copyright © 2011-2022 走看看