python - 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
解决方案
该代码可能使用了现在已经消失的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 < b
、0
ifa == 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)))
推荐阅读
- node.js - 在循环NodeJs中动态创建一个类
- npm - NPM 命令在 vs code 终端中不起作用
- ios - 子视图中的按钮不适用于 SwiftUI
- r - 为什么/如何修复闪亮应用的导航按钮?
- shopify - 从 HTML 中删除空的 P 标签?
- html - 两列reveal.js演示文稿中的异步内容
- ruby-on-rails - Carrierwave 不渲染图像(Ruby 3、Rails 6)
- php - compact():未定义变量:Laravel 8 中的对象
- applepay - Apple Pay 支付服务异常商人 ID=1234ABCD 未注册域=xyz.com
- r - 命名矩阵角处的列或行