Lambda /排序摘要问题-Python

时间:2018-10-04 19:40:21

标签: python python-3.x sorting lambda

我正在使用Thavelick的摘要程序进行一些编辑,但是找不到解决此错误的方法:

  

TypeError:()缺少1个必需的位置参数:“ s2”

这是我所知道的引起错误的代码:

def reorder(input, output):
    output.sort(key=lambda s1, s2: input.find(s1)-input.find(s2))
    return output

Thavelick的摘要链接:https://dialogflow.com/docs/agents/multilingual

2 个答案:

答案 0 :(得分:1)

该代码可能使用cmp的{​​{1}}参数,该参数现已消失。您不能只使用相同的sortlamdba函数必须仅接受一个参数。

有一种盲目转换代码的方法:使用functools.cmp_to_key。但是,我相信在这种情况下,提供适当的键功能会更容易:

key

也可以写成简单的形式:

output.sort(key=lambda s: input.find(s))

如果output.sort(key=input.find) ,表达式a - b返回一个负值,如果a < b,则返回0,如果a == b,则返回正值。因此,这意味着您的代码正在根据a > b中包含的元素的位置对output进行排序。

所以input函数只是查找key中子字符串的位置。


要使用input,您可以这样做:

cmp_to_key

答案 1 :(得分:0)

从文档中:https://docs.python.org/3/howto/sorting.html#key-functions

list.sort()和sorted()都有一个关键参数,用于指定在进行比较之前在每个列表元素上要调用的函数。

因此

output.sort(key=lambda s: input.find(s[0])-input.find(s[1]))