"key"函数不足的Python排序

标签 python sorting key comparator

一方面,很容易看出给定一个键函数,可以很容易地实现一种使用比较函数做同样事情的排序。减少情况如下:

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/

相关文章:

python - 在 Selenium 中找不到项目时如何引发错误并转到其他功能

python - 如何从嵌套列表中仅获取前 5 名和后 5 名列表?

mysql - 来自多个表的复合外键

c# - C# 是否支持基于索引的排序?

regex - ls -l -> 按正则表达式对文件进行排序

ubuntu - 无法将 keys.dev.pub 写入 :/home/ubuntu/. Composer

visual-studio-code - VSCode 命令面板(Ctrl + Shift + P)键盘快捷键在新安装中不起作用

python - os.execl 究竟做了什么?为什么会出现此错误?

python - 如何解析 Selenium 驱动程序元素?

python - 你如何将 python 变量传递给 sqlite3 查询?