一般的 sorted 排序函数 都有相应的 cmp函数,用来定制化排序的比较方法。
然而 python 3中的 sorted( ) 除去的cmp 参数,推荐使用 key。
Python中有相应的函数 支持将 cmp函数转化为key的值。
import functools
def tcmp(a,b):
if a > b :
return -1
elif a < b :
return 1
else:
return 0
nums = [1,2,3,4]
sorted_nums = sorted(nums, key = functools.cmp_to_key(tcmp))
Note:
- functools.cmp_to_key() 将 cmp函数 转化为 key。
- cmp函数的返回值 必须为 [1,-1,0]
eg:
import functools
def cmpele(a, b):
stra = str(a)
strb = str(b)
stra_len = len(stra)
strb_len = len(strb)
max_len = max(stra_len, strb_len)
i = 0
while i < max_len:
if i < stra_len:
sa = int(stra[i])
elif i == stra_len:
sa = max(int(stra[0]), int(stra[i-1]))
if i < strb_len:
sb = int(strb[i])
elif i == strb_len:
sb = max(int(strb[0]), int(strb[i-1]))
if sa > sb:
return -1
elif sa < sb:
return 1
i += 1
return 0
class Solution:
def largestNumber(self, nums):
"""
:type nums: List[int]
:rtype: str
"""
nums = sorted(nums,key=functools.cmp_to_key(cmpele))
res = ""
for ele in nums:
res += str(ele)
while len(res) > 1 and res[0] == '0':
res = res[1:]
return res
nums = [3,30,34,5,9]
print(Solution().largestNumber(nums))