我想使用返回浮点值的函数对列表进行排序。如果函数只有一个参数,我只需使用
sorted(mylist, key=myfunction)
并以我的快乐方式。但是,这对具有多个参数的函数不起作用。怎么办呢?
编辑:
人们要求提供更多细节,所以我们走了:
这是国际象棋引擎的一小部分。 'Bestmove'函数接受板位置(列表),深度(整数)和alpha / beta值,并返回包含两个条目的列表:板评估(浮点数)和建议的移动(列表) )。
为了优化alpha / beta修剪过程,我想改变评估移动的顺序(首先评估的强大动作会带来更高的效率)。为了达到这个目的,我想根据'Bestmove'函数返回的列表中的第一个值对移动列表进行排序。
答案 0 :(得分:2)
有几种方法可以做到这一点。假设我们有一个列表lst
。
设置默认值
仅当您可以预先设置未使用参数的默认值时,此功能才有效。
def func(x, y=1, z=2):
return x + y + z
res = sorted(lst, key=func)
使用部分功能
您可以使用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))
通过lambda
如果您的其他参数取决于列表项本身,您可以通过匿名lambda
并包含您的逻辑。
def func(x, y, z):
return x + y + z
res = sorted(lst, key=lambda x: func(x, x+1, x+2))