Python自定义sorted排序实现方法详解
作者:r1-12king 发布时间:2022-08-03 05:40:02
标签:python,自定义,sorted,排序
题目
输入一个正整数数组,把数组里面的所有属猪拼接起来成为一个数打印能拼接起来的所有数字中最大/最小的那个。
思考
直观想法就是求出这个数组中所有数字的全排列,然后拼接起来,再比较大小即可,当然复杂度过高。
另一个想法,我们可以定义一个排序规则,如下:
如果两个数m,n能拼接成数字mn,nm,如果mn>nm,则m应该在n前面,反之亦然
根据这个排序规则,我们可以重新排列数组,将排列好的数组拼接起来输出即可'为了方便比较,并且防止数据溢出(比如C语言),采用字符串的方式拼接。我们很容易可以写出如下代码:
def compare(strNum1, strNum2):
newStrNum1 = strNum1 + strNum2
newStrNum2 = strNum2 + strNum1
if newStrNum2 > newStrNum1:
return -1
elif newStrNum2 == newStrNum1:
return 0
else:
return 1
问题
排序规则定义好了,但是问题来了,一般的 sorted 排序函数 都有相应的 cmp函数,用来定制化排序的比较方法。但是python3的sorted函数已经删去了cmp参数,真不能跑去用python2吧
解决方案
由于python3中sorted函数除去compare函数,无法自定义排序规则,所以使用内置的函数,将cmp函数转化为key的值
Note:
functools.cmp_to_key() 将 cmp函数 转化为 key。
cmp函数的返回值 必须为 [1,-1,0]
python
from functools import cmp_to_key
def compare(strNum1, strNum2):
"""
返回最小排列的定义,如果需要最大,将返回值的+1、-1调换即可
"""
newStrNum1 = strNum1 + strNum2
newStrNum2 = strNum2 + strNum1
if newStrNum2 > newStrNum1:
return -1
elif newStrNum2 == newStrNum1:
return 0
else:
return 1
def print_min_nums(nums):
if not nums:
return 0
arr = [str(i) for i in nums]
newarr = sorted(arr,key=cmp_to_key(compare))
return "".join(newarr)
if __name__ == '__main__':
print(print_min_nums([3,32,321]))
来源:https://www.cnblogs.com/r1-12king/p/13201769.html


猜你喜欢
- MySQL安装说明MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品。MySQL 是最流行
- 场景:把一个时间字符串转成Date,存进Mysql。时间天数会比实际时间少1天,也可能是小时少了13-14小时Mysql的时区是CST(使用
- 本文实例讲述了Python常见MongoDB数据库操作。分享给大家供大家参考,具体如下:MongoDB 是一个基于分布式文件存储的数据库。由
- 是在客户端确认还是在服务器端确认? <SCRIPT LANGUAGE="VBSc
- win32com和微软的word接口文档有什么关系先回答一个网友私信问题: win32com和微软的word接口文档有什么关系win32co
- 一、相关配置情况一(使用的工具是 vue-cil)如果是用 vue-cli 创建的项目,则项目目录中没有 config 文件夹,所以我们需要
- SQL Update常见写法Oralce和DB2都支持的语法:update test1?set (test1.name,test1.age)
- 说明1、Matplotlib函数可以绘制图形,使用plot函数绘制曲线。2、需要将200个点的x坐标和Y坐标分别以序列的形式输入plot函数
- 利用layui制作与众不同的感谢表单,表格layui极大的提高了前端开发效率,它极具个性的样式等等都非常吸引人,接下来我将为大家展示如何利用
- 红包:Lena椒盐噪声图片:# -*- coding: utf-8 -*-"""Created on Sat
- 写过稍微大型一点 ASP 的人都知道,Session 这个对象真是好用,它可以用来记录使用者私有的资料变量,既安全又方便。但是你真的知道 S
- 当我们定义一个类的时候,有时候会定义一个私有属性来辅助开发。在其它语言中经常会用到 private 来修饰这个属性为私有属性。可是你知道么?
- 首先我们要知道所有的编程语言都有培训班,由于现在是一个快速发展的社会,许多人都面临就业难,就业竞争大的情况。这时候就好多人选择了学习编程语言
- 1.获取数据import requestsdef drg(url): try: &nb
- 目录一、Go调用C代码的原理二、在Go中使用C语言的类型1、原生类型数值类型指针类型字符串类型数组类型2、自定义类型枚举(enum)结构体(
- javascript中要判断一个变量是否为array通常是比较困难的,因为var a = [];alert(t
- 需求描述数据库中 num字段值为:实现的效果:需要将一行数据变成多行实现的sqlSELECT SUBSTRING_INDEX(SUBSTRI
- 可以说这个功能,在我理解了前面的“贪吃蛇”之后,实在是与刚开始想象的难度差了好多,当然是这种方式有取巧之嫌,终归是实现了功能,我们来进行分析
- 使用element-resize-detector监听元素宽度变化如图,当我们切换左侧菜单展示效果的时候,右侧内容会对应变宽,但此时的ech
- 如何做一个文本搜索? 比较简单,见下:<%Head = "搜索"SearchStri