问题描述
在解决一道编程题目(把数组排成最小数)中使用sorted()函数嵌套lambda表达式中遇到了问题,几经周折终于弄明白用法了。
错误示范1:
numbers.sort(key=lambda x, y: cmp(x + y, y + x))
报错为:TypeError: () missing 1 required positional argument: ‘y’
错误示范2:
numbers.sort(cmp=lambda x, y: cmp(x + y, y + x))
报错为:TypeError: ‘cmp’ is an invalid keyword argument for sort()
原因分析
Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列。
sorted(iterable,key=None,reverse=False),返回新的列表,对所有可迭代的对象均有效
sort(key=None,reverse=False) 就地改变列表 reverse:True反序;False 正序
解决方式
用functools.cmp_to_key()来曲线救国,修改之后的代码:
sorted(numbers, key=cmp_to_key(lambda x, y: int(x + y) - int(y + x)))
例子:
from functools import cmp_to_key
nums = [4, 3, 2, 1]
sorted(nums,key=cmp_to_key(lambda a, b: a - b))