【问题标题】:List of all changes from word1 to word2 (via Levenshtein)从 word1 到 word2 的所有更改列表(通过 Levenshtein)
【发布时间】:2020-01-17 11:10:23
【问题描述】:

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

import Levenshtein as leven 

word1 = "man"
word2 = "scotsman"

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

【问题讨论】:

  • 如果我的回答帮助您解决了您的问题,能否请您将其标记为该问题的答案?

标签: python list transformation word levenshtein-distance


【解决方案1】:

当较长的字符串(我称之为haystack以短字符串(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 开头和结尾时,该函数将计算 ends with needle 情况的更改步骤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2016-09-19
    相关资源
    最近更新 更多