一方面,很容易看出给定一个键函数,可以很容易地实现一种使用比较函数做同样事情的排序。减少情况如下:
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 上找到。文档。
关于 "key"函数不足的Python排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7814117/