gpt4 book ai didi

python - 在 Python 3 中将比较器编写为键进行排序的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 21:11:00 26 4
gpt4 key购买 nike

由于删除了 cmp 参数,我不确定如何在 Python 3 中编写比较器。考虑到 Python 3 中的以下代码,如何仅使用键重写比较器?

import functools

def my_cmp(x, y):
return x*5-y*2

l = [50, 2, 1, 9]
print(sorted(l, key=functools.cmp_to_key(my_cmp)))

谢谢。

最佳答案

你想出的这个“比较”函数是不一致的:它应该提供一个明确的(确定性的)顺序,意思是,如果你改变列表中元素的顺序并运行 sorted -你应该得到相同的结果!

在您的情况下,元素的顺序会影响排序:

import functools

def my_cmp(x, y):
return x*5-y*2


l = [50, 2, 1, 9]
print(sorted(l, key=functools.cmp_to_key(my_cmp))) # [2, 1, 9, 50]

l = [50, 1, 2, 9]
print(sorted(l, key=functools.cmp_to_key(my_cmp))) # [1, 2, 9, 50]

这意味着你的“比较”功能不一致。先提供好的排序函数,然后把它转换成key函数应该不是很难。


关于您在评论中提出的问题,key 接受一个仅采用单个参数的函数 - 并返回“它有多大”的“度量”。最简单的示例是比较数字,在这种情况下,您的关键函数可以简单地是:lambda x: x。对于任何数字,lambda 表达式都会返回自身,现在比较很简单!

修改你的例子:

def my_key(x):
return x

l = [50, 2, 1, 9]
print(sorted(l, key=my_key)) # [1, 2, 9, 50]

上面的一个较短的版本是:

l = [50, 2, 1, 9]
print(sorted(l, key=lambda x: x)) # [1, 2, 9, 50]

关于python - 在 Python 3 中将比较器编写为键进行排序的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com