首页 > 解决方案 > Lambda/Sort Summariser 问题 - Python

问题描述

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

TypeError: < lambda > () 缺少 1 个必需的位置参数:'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

标签: pythonpython-3.xsortinglambda

解决方案


该代码可能使用了现在已经消失的cmp参数。sort您不能只使用相同的lamdba. 该key函数必须只接受一个参数。

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

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

也可以简单地写成:

output.sort(key=input.find)

表达式a - b返回负值 if a < b0ifa == b和正值 if a > b。所以这意味着你的代码是output根据它包含的元素在哪里找到的input

所以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)))

推荐阅读