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]]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年6月23日 下午7:46
下一篇 2022年6月23日 下午7:46


相关推荐

  • oracle查看密码修改记录_oracle查询数据库用户密码到期时间

    oracle查看密码修改记录_oracle查询数据库用户密码到期时间SQL>showuserUSERis”SYS”SQL>createusert1identifiedbyt1;createusert1identifiedbyt1*ERRORatline1:ORA-01920:username’T1’conflictswithanotheruserorrolenameSQL>dropuse…

    2022年7月28日
    4
  • PHP获取网站中各文章的第一张图片的代码示例

    PHP获取网站中各文章的第一张图片的代码示例

    2021年10月30日
    45
  • php常用数据结构

    php常用数据结构

    2021年10月10日
    61
  • python+pycharm安装_pycharm安装教程2020

    python+pycharm安装_pycharm安装教程2020python与pycharm的下载与安装前言一、python的下载安装1.python的下载2.python的安装二、Pycharm的下载安装1.Pycharm的下载2.Pycharm的安装三、python与pycharm的安装包总结前言本文将会介绍python的下载,安装,pycharm的下载,安装,激活,以及一些注意事项一、python的下载安装1.python的下载https://www.python.org/这里直接给出python的官方网站(注:有些同学可能打不开网站,..

    2022年8月27日
    9
  • 简述线性反馈移位寄存器

    简述线性反馈移位寄存器反馈移位寄存器移位寄存器是流密码产生密钥流的一个主要组成部分 GF 2 上一个 n 级反馈移位寄存器由 n 个二元存储器与一个反馈函数 f a1 a2 an 组成 如下图所示 在任意时刻 这些级的内容构成该反馈移位寄存器的状态 每一状态对应于 GF 2 上的一个 n 维向量 共有 2 的 n 次方种可能的状态 每一时刻的状态可用 n 维向量 a1 a2 an 表示 其中 ai 是第 i 级存储器的内容 反馈函数初始状

    2026年3月17日
    2
  • java单例模式——详解JAVA单例模式及8种实现方式

    java单例模式——详解JAVA单例模式及8种实现方式##单例模式是最简单也是最基础的设计模式之一,下边一起学习一下单例模式!一.单例模式的定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用

    2022年7月8日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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