很多时候我们需要对一个list列表进行排序,然而我们想按照自己的排序方式进行排序,那么就需要自定义一个排序函数,然后按照这个排序函数进行排序。 由于Python3 取消了对 cmp 的支持,那么我们就不能用以前的cmp函数,然后按照cmp函数进行排序了,Python2中的自定义布尔函数cmp=custom_cmp(x, y)由Python3中的key=custom_key(x)代替。 python3 帮助文档: sorted(iterable, key=None, reverse=False) key接受一个函数,这个函数只接受一个参数,默认为None reverse是一个布尔值。如果设置为True,列表元素将被倒序排列,默认为False
那么我们要改写的就是这个 key 所对应的方法,由于只接受一个参数,那么我们想对哪个元素进行排序,就把哪个元素传进去。然后利用 lambda 表达式进行排序就好了。
举个例子:51Nod 1874 字符串排序
思路:
我们就将每一个字符串的无序度计算出来,然后按照无序度从小到达排序就OK了
代码:
def cmp1(a): la = len(a) suma = 0 for i in range(0,la): for j in range(i+1, la): if a[j]1 return suma s = input() num = s.split() n = int(num[0]) m = int(num[1]) list = [] i = 0 while i 1 list.sort(key=lambda x:cmp1(x)) for i in list: print(i)