Kin*_*bit 1 python sorting list
我想使用返回浮点值的函数对列表进行排序。如果函数只有一个参数,我会简单地使用
sorted(mylist, key=myfunction)
Run Code Online (Sandbox Code Playgroud)
并在我快乐的方式。但是,这不适用于具有多个参数的函数。如何才能做到这一点?
编辑:
人们询问更多细节,所以我们开始:
这是国际象棋引擎的一小部分。'Bestmove' 函数接受棋盘位置(一个列表)、深度(一个整数)和 alpha/beta 值,并返回一个包含两个条目的列表:棋盘评估(一个浮点数)和建议的移动(一个列表)。
为了优化 alpha/beta 修剪过程,我想更改评估移动的顺序(首先评估的强移动会导致更高的效率)。为此,我想按“Bestmove”函数返回的列表中的第一个值对移动列表进行排序。
有几种方法可以做到这一点。假设我们有一个列表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)