Lambda/排序摘要器问题

2024-10-01 01:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Thavelick的摘要生成器进行一些编辑,但找不到修复此错误的方法:

TypeError: < lambda > () missing 1 required positional argument: 's2'

以下是我知道的导致错误的代码:

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

Thavelick的摘要器链接:https://github.com/thavelick/summarize/blob/master/summarize.py


Tags: 方法lambda编辑inputoutput错误requiredfind
2条回答

这段代码可能使用了cmp参数来表示sort,现在已经没有了。不能只使用相同的lamdbakey函数只能接受一个参数。你知道吗

有一种方法可以盲目地转换代码:使用^{}。不过,我认为在这种情况下,提供适当的键功能更容易:

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

也可以简单地写为:

output.sort(key=input.find)

表达式a - ba < b时返回负值,在a == b时返回0,在a > b时返回正值。这意味着您的代码将根据它包含的元素在input中的位置对output进行排序。你知道吗

所以key函数只是查找子串在input中的位置。你知道吗


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

from functools import cmp_to_key

output.sort(key=cmp_to_key(lambda s1, s2: input.find(s1) - input.find(s2)))

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

两者列表.排序()和sorted()有一个键参数,用于指定在进行比较之前对每个列表元素调用的函数。

因此

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

相关问题 更多 >