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 字典dict使用介绍
Nov 30 Python
用Python进行行为驱动开发的入门教程
Apr 23 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
浅析python的优势和不足之处
Nov 20 Python
Python3 log10()函数简单用法
Feb 19 Python
Django实现学生管理系统
Feb 26 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
给我一面国旗 python帮你实现
Sep 30 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
Django单元测试中Fixtures用法详解
Feb 25 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
详解运行Python的神器Jupyter Notebook
Jun 03 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 定界符格式引起的错误
2011/05/24 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
python使用post提交数据到远程url的方法
2015/04/29 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
python二维键值数组生成转json的例子
2019/12/06 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
旷课检讨书2000字
2014/01/14 职场文书
yy司仪主持词
2014/03/22 职场文书
自查自纠整改报告
2014/11/06 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
创先争优承诺书
2015/01/20 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
html5调用摄像头实例代码
2021/06/28 HTML / CSS