首页
学习
活动
专区
工具
TVP
发布

Python花式编程案例集锦(9):sorted()函数中消失的cmp参数

明天开启全国巡讲Python模式,连续8场20天讲课,外加路上来回大约16天,这个假期有的忙了。所以接下来的一段时间里不一定能像以前更新的那么频繁,我尽量。

问题描述:给定一个含有多个整数的列表,将这些整数任意组合和连接,返回能得到的最小值。

算法描述:将这些整数变为相同长度(按最大的进行统一),短的右侧使用个位数补齐,然后将这些新的数字升序排列,补齐后一样大小的数字按原始数据降序排列,排序后,将低位补齐的数字删掉,把剩下的数字连接起来,即可得到满足要求的数字。

当时给出的代码是这样的:

看上去很复杂的样子,能更简单点吗?于是有了下面的代码:

上面实际上就是一行代码计算结果,为了方便阅读,才换了很多行。虽然代码简短了很多,但是对Python函数式编程要有一定了解才能看懂。那么就再来个暴力点的代码吧,在所有排列组成的整数中查找最小整数:

但是上面的代码时间复杂度有点高啊,毕竟要计算全排列,有没有更好的办法呢?下面代码最初版本由浙江温州永嘉县教师发展中心应根球老师提供。

思路倒推容易得到,在最终结果的最小整数的排列中,交换任意两个数字得到的数字都会使得结果变大。假设理想排列是x,也就是说,对于任意i和j都有int(str(x[i])+str(x[j]))

但是问题又来了,在Python 3.x中,内置函数sorted()和列表方法sort()都取消了cmp参数而只保留了key参数,key参数指定的函数只能接收一个参数而在Python 2.x中的cmp参数指定的函数可以接收两个参数,那肿么办呢?Python标准库funtools中的cmp_to_key()可以帮助完成这个转换。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706B1THHY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券