Python按功能排序列表,带有多个参数

Python sort list by function with multiple arguments

本问题已经有最佳答案,请猛点这里访问。

我想使用返回浮点值的函数对列表进行排序。如果函数只有一个参数,我只需使用

1
sorted(mylist, key=myfunction)

祝你快乐。但是,这不适用于具有多个参数的函数。怎么能做到?

编辑:

人们要求更多的细节,所以我们开始:

这是国际象棋引擎的一小部分。"bestmove"函数接受板位置(列表)、深度(整数)和alpha/beta值,并返回包含两个条目的列表:板评估(浮点)和建议的移动(列表)。

为了优化alpha/beta修剪过程,我想更改对移动进行评估的顺序(先评估的强移动会提高效率)。为此,我希望按"bestmove"函数返回的列表中的第一个值对移动列表进行排序。


有几种方法可以做到这一点。假设我们有一个清单lst

设置默认值

只有当您可以预先为未使用的参数设置默认值时,这才有效。

1
2
3
4
def func(x, y=1, z=2):
    return x + y + z

res = sorted(lst, key=func)

使用部分函数

可以使用functools.partial创建一个参数固定的函数。

1
2
3
4
5
6
from functools import partial

def func(x, y, z):
    return x + y + z

res = sorted(lst, key=partial(func, y=1, z=2))

通过lambda

如果您的附加参数依赖于列表项本身,则可以通过匿名lambda传递并包含逻辑。

1
2
3
4
def func(x, y, z):
    return x + y + z

res = sorted(lst, key=lambda x: func(x, x+1, x+2))