Python排序函数

Python排序函数Python中自带了两个排序函数sort和sorted,用法分别为:sort函数用法list.sort(cmp=None,key=None,reverse=False)特点:对list原地排序(直接改变数组),无返回值。参数:cmp——可选参数,可用于自定义排序规则。key——主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一…

大家好,又见面了,我是你们的朋友全栈君。

Python中自带了两个排序函数sort和sorted,用法分别为:

sort函数用法

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

特点:对list原地排序(直接改变数组),无返回值。

参数:

  • cmp——可选参数, 可用于自定义排序规则。
  • key ——主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse——升序or降序,reverse = True 降序, reverse = False 升序(默认)。

sorted函数用法

sorted(iterable[, cmp[, key[, reverse]]])

特点:可以对所有可迭代的对象进行排序操作。返回的是一个新的 list,不修改原来的对象。

参数:

  • iterable – 可迭代对象。
  • cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

自定义排序规则

这里以sorted函数为例,自定义排序规则。

比如给定区间数组s = [[1,6],[2,3],[1,4],[3,5]],数组中的每个元素代表一个区间范围,希望的排序规则:根据区间起始点的大小进行排序,起始点小的排在前面,起始点如果相同,则终止点小的排在前面。

  1. 自定义compare函数,compare函数需要传两个参数a和b(a和b每次都是从可迭代对象里面取的,这个咱们不管),这个compare函数需要有三个返回值{-1, 0, 1},当a<b时,返回值为-1,a=b时,返回值为0,a>b时,返回值为1.

  2. python3中的sorted()函数去除了cmp参数,推荐使用key。functools.cmp_to_key() 将 compare函数 转化为 key。

import functools
def compare(a, b):
    if a[0] != b[0]:
        return -1 if a[0] < b[0] else 1
    else:
        if a[1] < b[1]:
            return -1
        elif a[1] > b[1]:
            return 1
        else:
            return 0

s = [[1,6],[2,3],[1,4],[3,5]]
s = sorted(s, key=functools.cmp_to_key(compare))
print(s)  # [[1, 4], [1, 6], [2, 3], [3, 5]]

#使用sort函数也是一样的用法
# s.sort(key=functools.cmp_to_key(compare))
# print(s) # [[1, 4], [1, 6], [2, 3], [3, 5]]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149800.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 第一课 Delphi7完全自学教程「建议收藏」

    第一课 Delphi7完全自学教程「建议收藏」   首先声明,我会以delphi7教程为主,可能会在这方面用的时间比较多,废话不多说了,今天给大家带来delphi7中最基本的面向对象程序设计语言。delphi是可视化的编程语言,delphi利用提供可视的"组件",像组件里添加一些功能或命令,该程序就有了自己所拥有的功能,比如说给组件“Button1”添加双击事件,然后干什么了?给窗体起个名字,或给按钮起一个名字都可以。这就是可视…

  • Parallel.ForEach 使用多线程遍历循环

    Parallel.ForEach 使用多线程遍历循环原地址路径:https://www.cnblogs.com/personblog/archive/2019/10/09/11640801.htmlParallel.ForEach相对于foreach是多线程,并行操作;foreach是单线程循环操作。staticvoidMain(string[]args){Console.WriteLine(“HelloWorld!”);List<UserInfo>lst=n

  • 远程桌面命令是什么 如何使用命令连接远程桌面

    远程桌面命令是什么 如何使用命令连接远程桌面

  • SQL Server实现某书店图书进货、销售管理系统[通俗易懂]

    SQL Server实现某书店图书进货、销售管理系统[通俗易懂]  文末附带数据库文件及数据库日志文件地址。 一.需求分析1、背景(1)待开发的系统名称:图书进货、销售管理系统(2)开发者:FriggaAZ(3)用户:书店管理人员(4)开发环境:① 操作系统:Windows10专业版Build17682② 数据库:SQLServer2017Developer2、系统总体功能分析需求(1)…

  • java什么是重写什么是重载_方法的重写和重载

    java什么是重写什么是重载_方法的重写和重载重写和重载的区别一.重写1.重写概念重写是父类与子类中的多态性,子类可以继承父类中的方法并进行重写,但是要保证几点没有变1)方法返回值类型不变2)参数列表不变3)方法名不变满足了这三点之后,子类中父类的方法就被覆盖了,如果想要调用父类的方法,用super关键字2.重写规则重写也是有一定的规则的,否则会报错重写规则:1)参数列表必须完全与被重写的方法相同;2)返回类型必须一直与被重写的方法相同;3)访问修饰符的权限一定要大于等于父类方法的访问修饰符;4)重写方法一定不能抛出

  • mysql获取当前时间+1天_mysql获取当前时间,前一天,后一天 流失的痕迹「建议收藏」

    mysql获取当前时间+1天_mysql获取当前时间,前一天,后一天 流失的痕迹「建议收藏」负责的项目中,使用的是mysql数据库,页面上要显示当天所注册人数的数量,获取当前的年月日,我使用的是CURDATE(),错误的sql语句eg:SELECTCOUNT(*)FROMUSERWHEREregisterDate>=CURDATE()ANDregisterDate<CURDATE()+1;虽然获取到的数量在测试环境中是正确的,但在发布到线上的时候,发…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号