一方面,给定一个关键函数很容易看到,可以使用比较函数轻松实现一个使用相同功能的排序.减少如下:
def compare(x,y):
return key(x) - key(y)
另一方面,我们如何通过使用密钥限制元素图的各种排序来确定我们不会失去潜在的排序?例如,假设我想对长度为2元组(x,y)的列表进行排序,其中我坚持使用以下比较方法:
def compare(tup1,tup2):
if (tup1[1] < tup2[0]):
return -1
if (tup1[0] % 2 == 0):
return 1
if (tup1[0] - tup2[1] < 4):
return 0
else:
return 1
现在告诉我如何将此比较转换为相应的“键”函数,以便我的排序算法以相同的方式进行?这不是一个人为的例子,因为这些自定义排序在搜索过程中出现在对称破坏算法中,并且非常重要.
解决方法:
使用functools.cmp_to_key
,这将保证与比较功能相同的排序行为.可以在Python的Sorting How To文档中找到此函数的源代码.