Python按具有多个参数的函数对列表进行排序

Kin*_*bit 1 python sorting list

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

sorted(mylist, key=myfunction)
Run Code Online (Sandbox Code Playgroud)

并在我快乐的方式。但是,这不适用于具有多个参数的函数。如何才能做到这一点?

编辑:

人们询问更多细节,所以我们开始:

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

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

jpp*_*jpp 5

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

设置默认值

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

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

res = sorted(lst, key=func)
Run Code Online (Sandbox Code Playgroud)

使用偏函数

您可以使用functools.partial固定某些参数来创建函数。

from functools import partial

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

res = sorted(lst, key=partial(func, y=1, z=2))
Run Code Online (Sandbox Code Playgroud)

通过 lambda

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

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

res = sorted(lst, key=lambda x: func(x, x+1, x+2))
Run Code Online (Sandbox Code Playgroud)