如何将待排序列表的item传入sorted()的lambda key排序函数?
解决方案
你当前的代码存在参数不匹配的问题:你给lambda定义了item, crit1, crit2三个参数,但sorted()的key函数只会接收一个参数(也就是遍历items时的单个元素),运行时会直接报错。下面是两种可行的修正方案:
方案1:利用闭包捕获外部变量
这是最简洁的写法,让lambda只接收sorted()传递的item参数,crit1和crit2直接从外部函数的作用域中获取:
def some_function(items, crit1, crit2): items = sorted( items, key=lambda item: item_fitness(item, crit1, crit2), reverse=True ) # 处理排序后的items逻辑 return something
方案2:使用functools.partial(可选)
如果不习惯用lambda,可以用functools.partial把item_fitness的后两个参数预先固定,生成一个只需要传入item的新函数:
from functools import partial def some_function(items, crit1, crit2): # 固定适配准则参数,得到仅需传入item的函数 bound_fitness = partial(item_fitness, fitness_criterion1=crit1, fitness_criterion2=crit2) items = sorted(items, key=bound_fitness, reverse=True) # 处理排序后的items逻辑 return something
关于item_fitness的单独调用
因为item_fitness本身的定义就是接收item和两个准则参数,所以在其他地方单独调用时,直接传入对应参数即可:
# 示例:计算单个item的适配分数 target_item = items[0] fitness_score = item_fitness(target_item, custom_criterion1, custom_criterion2)
内容的提问来源于stack exchange,提问作者rbaleksandar
相关产品推荐
相关产品推荐

