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

 更新时间:2020年09月18日 15:38:19   作者:r1-12king  
这篇文章主要介绍了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]))

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

相关文章

  • Python集合set()使用的方法详解

    Python集合set()使用的方法详解

    这篇文章主要为大家详细介绍了Python集合set()使用的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Python实例方法、类方法、静态方法的区别与作用详解

    Python实例方法、类方法、静态方法的区别与作用详解

    这篇文章主要介绍了Python实例方法、类方法、静态方法的区别与作用,结合实例形式分析了Python面向对象程序设计中实例方法、类方法、静态方法的概念、原理、用法及相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • python循环监控远程端口的方法

    python循环监控远程端口的方法

    这篇文章主要介绍了python循环监控远程端口的方法,涉及Python实现端口监控的技巧,需要的朋友可以参考下
    2015-03-03
  • python中删除某个元素的方法解析

    python中删除某个元素的方法解析

    这篇文章主要介绍了python中删除某个元素的方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python文件操作和异常处理的方法和技巧

    Python文件操作和异常处理的方法和技巧

    本文介绍了Python文件操作和异常处理的方法和技巧,包括读写文本文件、读写二进制文件、文件指针、异常类型和处理、try-except语句、异常处理程序等内容,帮助读者更好地掌握Python在文件操作和异常处理方面的应用
    2023-05-05
  • 微软开源最强Python自动化神器Playwright(不用写一行代码)

    微软开源最强Python自动化神器Playwright(不用写一行代码)

    这篇文章主要介绍了微软开源最强Python自动化神器Playwright(不用写一行代码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • python+mysql实现个人论文管理系统

    python+mysql实现个人论文管理系统

    这篇文章主要为大家详细介绍了python+mysql实现个人论文管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • python继续找对象详解

    python继续找对象详解

    这篇文章主要为大家介绍了python继续找对象的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 如何用python将文件夹内多个excel表格合并成总表

    如何用python将文件夹内多个excel表格合并成总表

    前几天遇见这么一个问题,手上有很多张表格,这些表格中都只有一个sheet,需要把这些表汇总到一张表,下面这篇文章主要给大家介绍了关于如何用python将文件夹内多个excel表格合并成总表的相关资料,需要的朋友可以参考下
    2023-06-06
  • Tortoise-orm信号实现及使用场景源码详解

    Tortoise-orm信号实现及使用场景源码详解

    这篇文章主要为大家介绍了Tortoise-orm信号实现及使用场景源码详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论