Python自定义sorted排序实现方法详解


Posted in Python onSeptember 18, 2020

题目

输入一个正整数数组,把数组里面的所有属猪拼接起来成为一个数打印能拼接起来的所有数字中最大/最小的那个。

思考

直观想法就是求出这个数组中所有数字的全排列,然后拼接起来,再比较大小即可,当然复杂度过高。

另一个想法,我们可以定义一个排序规则,如下:
  如果两个数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]))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
修改python plot折线图的坐标轴刻度方法
Dec 13 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
在pycharm中为项目导入anacodna环境的操作方法
Feb 12 Python
解决Python在导入文件时的FileNotFoundError问题
Apr 10 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
浅析PyCharm 的初始设置(知道)
Oct 12 Python
python实现一个简单RPC框架的示例
Oct 28 Python
分享Python异步爬取知乎热榜
Apr 12 Python
python爬虫爬取网页数据并解析数据
Sep 18 #Python
Python实现迪杰斯特拉算法过程解析
Sep 18 #Python
Python 操作 MySQL数据库
Sep 18 #Python
python实现人工蜂群算法
Sep 18 #Python
Python猫眼电影最近上映的电影票房信息
Sep 18 #Python
python实现简单遗传算法
Sep 18 #Python
详解python 支持向量机(SVM)算法
Sep 18 #Python
You might like
生成静态页面的PHP类
2006/11/25 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
Python 正则表达式入门(初级篇)
2016/12/07 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
Python 转换文本编码实现解析
2019/08/27 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
仓库保管员岗位职责
2013/12/20 职场文书
2013年军训通讯稿
2014/02/05 职场文书
大专生找工作自荐书
2014/06/10 职场文书
模范班主任事迹材料
2014/12/17 职场文书
2019年手机市场的调研报告2篇
2019/10/10 职场文书
python异常中else的实例用法
2021/06/15 Python
Python集合的基础操作
2021/11/01 Python