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

时间:2018-04-20 23:42:28

标签: python list sorting

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

sorted(mylist, key=myfunction)

并以我的快乐方式。但是,这对具有多个参数的函数不起作用。怎么办呢?

编辑:

人们要求提供更多细节,所以我们走了:

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

为了优化alpha / beta修剪过程,我想改变评估移动的顺序(首先评估的强大动作会带来更高的效率)。为了达到这个目的,我想根据'Bestmove'函数返回的列表中的第一个值对移动列表进行排序。

1 个答案:

答案 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))