python中稍微不同的字符串等价函数

时间:2011-08-03 16:33:52

标签: python string

我有许多字符串不完全匹配但应该被认为是等效的。例如'Bob'和'Robert'或'WWF'和'World Wrestling Federation'。

为了实现等价函数,我将所有等效的字符串放入元组,然后将所有元组放入列表中。然后,对于每个输入字符串对,检查它们是否都存在于同一元组内,如果是,则返回true。任何人都可以建议更优雅的方式来做到这一点?

谢谢, 理查德

编辑:澄清一下,该函数可以接收任何两个('Bob','Robbie','Robert','Roberto')并且应该返回true。

2 个答案:

答案 0 :(得分:2)

如果你的等价元组列表是EQUIVALENCES,你可以创建一个字典,将每个字符串映射到它的等价:

word_equivs = {}

for equiv in EQUIVALENCES:
    for word in equiv:
        word_equivs[word] = equiv

然后你可以通过查看它们是否映射到相同的等价来检查两个字符串是否相等:

def equivalent(s1, s2):
    e1 = word_equivs.get(s1) 
    e2 = word_equivs.get(s2)
    if e1 and e2:
        return e1 == e2
    else:
        return s1 == s2

答案 1 :(得分:0)

我建议使用从字符串到int的字典。 然后为每组等效字符串递增一个计数器变量计数器 可能正在使用

counter  = 0
d = defaultdict(int)
d["WWF"] = d["World Wrestling Federation"] = counter++;
d["Bob"]=d["Marley"]=counter++

当你想找到等价时,只需做

if( d[s1]==d[s2] )