python - 从 word1 到 word2 的所有更改列表(通过 Levenshtein)
问题描述
有没有办法显示单词转换的具体变化步骤?例如:
import Levenshtein as leven
word1 = "man"
word2 = "scotsman"
# desired output
leven.???(word1,word2) = ['sman','tsman','otsman','cotsman','scotsman']
解决方案
haystack
当较长的字符串(我称它以短字符串 ( ) 开头或结尾时,下面的代码将执行您想要的操作。and参数needle
的顺序无关紧要。word1
word2
注意当针在字符串中间时,此功能不起作用,因为这可能会导致其他问题(例如,当子字符串出现多次时该怎么办?)。
word1 = "man"
word2 = "scotsman"
def changeSteps(word1, word2):
needle = word1 if len(word1) < len(word2) else word2
haystack = word1 if len(word1) > len(word2) else word2
if haystack.endswith(needle):
reverse=True
else:
reverse = False
if needle in haystack:
difference = haystack.replace(needle, "")
if reverse:
difference = ''.join(reversed(difference))
needle = ''.join(reversed(needle))
steps = [needle+difference[0:i] for i in range(1,len(difference)+1)]
if reverse:
steps = [ ''.join(reversed(s)) for s in steps ]
return steps
else:
return []
print(changeSteps(word1, word2))
编辑:还要注意,当字符串以needle
您告诉它查找的开头和结尾时,该函数将计算以针盒结尾的更改步骤。
推荐阅读
- c# - C# DatePicker 转换为 DateTime 并计算年龄
- javascript - java selenium - 如何
在网页中应用或添加选项卡并执行 - java - 将另一个jsp文件中的图标菜单作为列添加到liferay中的数据表
- node.js - 如何使用nodejs在aws lambda函数中调用rest api
- javascript - 如何使用jQuery动态更改SVG圆形填充颜色的颜色
- django - Django过滤外键属性,显式和隐式外键属性命名的区别
- json - swift 4 - 具有树结构的 json 解码对象
- java - Eclipse Java EE 中缺少“下载其他服务器适配器”
- python - discord.errors.Forbidden: FORBIDDEN (status code: 403): 从试图 dm 一些不和谐的成员
- docker - 如何将 CMD 或 ENTRYPOINT 与使用 ENTRYPOINT 的基础图像一起使用