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的消息队列包SnakeMQ使用初探
Jun 29 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
使用python3构建文件传输的方法
Feb 13 Python
Python数据类型之List列表实例详解
May 08 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
TensorFlow tensor的拼接实例
Jan 19 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
Feb 14 Python
python基于机器学习预测股票交易信号
May 25 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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 cookie使用方法学习笔记分享
2013/11/07 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
php将html转为图片的实现方法
2017/05/19 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
2016/12/04 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
python装饰器使用方法实例
2013/11/21 Python
Python中的自定义函数学习笔记
2014/09/23 Python
处理Python中的URLError异常的方法
2015/04/30 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
24式加速你的Python(小结)
2019/06/13 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
详解android与HTML混合开发总结
2018/06/06 HTML / CSS
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
护理专业的自荐信
2013/10/22 职场文书
医学检验专业大学生求职信
2013/11/18 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
办理房产证委托书
2014/09/18 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
python内置进制转换函数的操作
2021/06/02 Python
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis