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

作者:r1-12king 时间:2022-08-03 05:40:02 

题目

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

思考

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

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

标签:python,自定义,sorted,排序
0
投稿

猜你喜欢

  • 如何在asp中创建DSN?

    2009-11-14 20:46:00
  • Python基于回溯法子集树模板解决全排列问题示例

    2023-12-18 21:25:04
  • Python3.9最新版下载与安装图文教程详解(Windows系统为例)

    2023-12-13 20:26:51
  • Pandas时间数据处理详细教程

    2022-04-29 03:14:22
  • pygame实现雷电游戏雏形开发

    2021-04-14 13:52:31
  • python-opencv颜色提取分割方法

    2022-01-22 06:26:23
  • python学习之第三方包安装方法(两种方法)

    2021-02-20 03:29:40
  • Python sklearn 中的 make_blobs() 函数示例详解

    2022-07-24 21:45:48
  • PHP实现加减乘除最简单的实例分享

    2023-06-14 16:17:41
  • php设计模式之装饰模式应用案例详解

    2023-11-14 13:37:20
  • 一个asp伪静态的程序实现方法

    2010-06-28 18:56:00
  • br玩转清除浮动

    2007-05-11 16:52:00
  • javascript 45种缓动效果(二)

    2009-09-19 18:53:00
  • 详解element-ui 表单校验 Rules 配置 常用黑科技

    2023-08-17 17:42:47
  • 用python实现批量重命名文件的代码

    2023-01-02 09:09:20
  • Python实现将图像转换为ASCII字符图

    2022-07-15 06:05:20
  • django queryset相加和筛选教程

    2022-09-10 11:04:43
  • python中 _、__、__xx__()区别及使用场景

    2021-07-28 06:10:48
  • ASP提速技巧五则

    2008-03-20 13:20:00
  • Oracle DBA常用语句

    2009-08-05 20:15:00
  • asp之家 网络编程 m.aspxhome.com