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