Python sort list by function with multiple arguments
本问题已经有最佳答案,请猛点这里访问。
我想使用返回浮点值的函数对列表进行排序。如果函数只有一个参数,我只需使用
1 | sorted(mylist, key=myfunction) |
祝你快乐。但是,这不适用于具有多个参数的函数。怎么能做到?
编辑:
人们要求更多的细节,所以我们开始:
这是国际象棋引擎的一小部分。"bestmove"函数接受板位置(列表)、深度(整数)和alpha/beta值,并返回包含两个条目的列表:板评估(浮点)和建议的移动(列表)。
为了优化alpha/beta修剪过程,我想更改对移动进行评估的顺序(先评估的强移动会提高效率)。为此,我希望按"bestmove"函数返回的列表中的第一个值对移动列表进行排序。
有几种方法可以做到这一点。假设我们有一个清单
设置默认值
只有当您可以预先为未使用的参数设置默认值时,这才有效。
1 2 3 4 | def func(x, y=1, z=2): return x + y + z res = sorted(lst, key=func) |
使用部分函数
可以使用
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
如果您的附加参数依赖于列表项本身,则可以通过匿名
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)) |