python的数组中取一个整数_[Python]-输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。...

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

[3, 30, 34, 5, 9]

一、需要对列表进行排列,取出相邻的两个元素,组成一个数,例如:ab , 如果ab < ba;则相应权重 a < b;使用这个规则对列表进行排序,得到的排序结果组合起来就是数字最小的一个。

二、在Python2中的函数sorted(data, cmp=None, key=None, reverse=False)

其中data 是等待排序的数据

cmp是带两个参数的比较函数:cmp(x, y);当 x < y时返回负数;当 x = y 时返回0;当x > y时返回正数。默认由小到大,返回值应该为负数。

(cmp函数会确定待排序列表中元素的权重,当cmp函数的返回值为 -1 时,表示权重 x < y ; 返回值为 0 时,权重 x = y; 返回值为 -1 时,权重 x > y)

--->由cmp函数确定待排序列表中的元素的权重, 其后sorted()函数会根据权重值对列表重新排序。

key是带有一个参数的函数:key(x),用来提取每个函数的值进行比较,默认值为None ,直接比较每个元素。

总结一下,在sorted(data, cmp=None, key=None, reverse=False)函数中:

data是想要排序的itrrater,例如一个列表,列表中的每个元素可能是字典(需要设置参数key)

reverse, 决定是升序还是降序

key参数需要传递一个函数,有一个参数,一个返回值,可以对传入的iterrater的元素进行变换,然后按照返回的结果进行排序。

cmp(x, y)函数决定比较时元素权重谁大时小,会将iterrater中元素两两进行比较,当返回 -1 时认定权重 x < y;-->我们为您可以通过自定义cmp()函数来自定义比较规则.

Python2中可以重新定义比较规则

def sorted_role(x, y): # 比较规则函数

if int(str(x) + str(y)) < int(str(y) + str(x)): # 对列表中两个元素拼接成的数字进行比较

return -1 # ,确定相邻两个元素的先后位置,(返回-1 表示 前边权重小,后边权重大)

if int(str(x) + str(y)) == int(str(y) + str(x)):# 使得列表顺序为组成数字最小的顺序

return 0

if int(str(x) + str(y)) > int(str(y) + str(x)):

return 1

def PrintMinNumber(numbers):

if not numbers: # 列表中没有数据返回空值

return ""

numbers = sorted(numbers, cmp = sorted_role) # 重新定义的排序规则生效。(权重由小到大依次排列)

return ''.join([str(i) for i in numbers]) #将排好序的列表元素转化为字符串拼接起来,返回

Python3中的sort()函数

Python3中的sort()函数没有了cmp参数,需要使用from functools import cmp_to_key

from functools import cmp_to_key # 导入需要使用的工具

def sorted_role(x, y): # 重新定义的比较规则函数

if int(str(x) + str(y)) < int(str(y) + str(x)):

return -1 # xy - yx < 0 时,应该 x在前, y 在后, 返回负值

if int(str(x) + str(y)) == int(str(y) + str(x)):

return 0

if int(str(x) + str(y)) > int(str(y) + str(x)):

return 1 # xy - yx > 0 时,应该 y在前, x 在后, 返回正值

def PrintMinNumber(numbers):

#key=cmp_to_key(sorted_role):启动新的排序规则

numbers.sort(key=cmp_to_key(sorted_role))

return ''.join([str(i) for i in numbers])

简化写法

from functools import cmp_to_key # 导入需要使用的工具

def PrintMinNumber(numbers):

# 定义匿名函数:当 ab - ba < 0时,a应该在前,b在后,返回负值。

cmp = lambda a, b: int(str(a) + str(b)) - int(str(b) + str(a))

numbers.sort(key=cmp_to_key(cmp))

return ''.join([str(i) for i in numbers])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值