首页 > 解决方案 > 从 word1 到 word2 的所有更改列表(通过 Levenshtein)

问题描述

有没有办法显示单词转换的具体变化步骤?例如:

import Levenshtein as leven 

word1 = "man"
word2 = "scotsman"

# desired output
leven.???(word1,word2) = ['sman','tsman','otsman','cotsman','scotsman']

标签: pythonlisttransformationwordlevenshtein-distance

解决方案


haystack当较长的字符串(我称它以短字符串 ( ) 开头或结尾时,下面的代码将执行您想要的操作。and参数needle的顺序无关紧要。word1word2

注意当针在字符串中间时,此功能不起作用,因为这可能会导致其他问题(例如,当子字符串出现多次时该怎么办?)。

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您告诉它查找的开头和结尾时,该函数将计算以针盒结尾的更改步骤。


推荐阅读