Python中两个字符串之间的汉明距离

6

我需要找到两个字符串之间的汉明距离:

chaine1 = 6fb17381822a6ca9b02153d031d5d3da

chaine2 = a242eace2c57f7a16e8e872ed2f2287d

XOR函数不起作用,我在网上搜索也没有找到很好的解决方法。

我尝试修改在网上找到的一些内容,但是有一些无效的语法...

assert len (chaine1) == len(chaine2)

return sum(chaine1 != chaine2 for chaine1, chaine2 in zip(chaine1, chaine2))


if __name__=="__main__":
chaine1 = hashlib.md5("chaine1".encode()).hexdigest()

chaine2 = hashlib.md5("chaine2".encode()).hexdigest()
print hamming_distance(chaine1, chaine2)

我该怎么做?


你尝试过什么?阅读[提问]。 - DeepSpace
请编辑您的问题,而不是在评论中发布代码。 - iz_
一些参考资料:*hashlibhexdigest*和encode - Peter Mortensen
1
很可能代码开头缺少了"def hamming_distance(chaine1, chaine2):",实际代码应该正确缩进(不像这里发布的)。但是原帖作者已经离开:"最后一次出现超过4年前"。 - Peter Mortensen
3个回答

21

以下是一个使用两种不同方法计算汉明距离的程序。

import hashlib

def hamming_distance(chaine1, chaine2):
    return sum(c1 != c2 for c1, c2 in zip(chaine1, chaine2))

def hamming_distance2(chaine1, chaine2):
    return len(list(filter(lambda x : ord(x[0])^ord(x[1]), zip(chaine1, chaine2))))

if __name__=="__main__":    
    chaine1 = hashlib.md5("chaine1".encode()).hexdigest()
    chaine2 = hashlib.md5("chaine2".encode()).hexdigest()
    
    #chaine1 = "6fb17381822a6ca9b02153d031d5d3da"
    #chaine2 = "a242eace2c57f7a16e8e872ed2f2287d"
    
    assert len(chaine1) == len(chaine2)
    
    print(hamming_distance(chaine1, chaine2))
    
    print(hamming_distance2(chaine1, chaine2))
你遇到“Invalid syntax: …”错误的原因可能是缺少Python所需的缩进。

3
from scipy.spatial import distance

DNA1 = list("GAGCCTACTAACGGGAT")
DNA2 = list("CATCGTAATGACGGCCT") 

d = round(distance.hamming(DNA1, DNA2) * len(DNA1))
print(d)  # 7

0

首先我们需要回顾一下两个字符串之间汉明距离的定义:

两个等长字符串的汉明距离是它们对应位置上不同字符的个数。更加技术性地说,它是将一个字符串转化为另一个字符串所需的最小替换次数。

现在让我们来解决这个问题。

def hamming(s1,s2):
result=0
if len(s1)!=len(s2):
    print("String are not equal")
else:
    for x,(i,j) in enumerate(zip(s1,s2)):
        if i!=j:
            print(f'char not math{i,j}in {x}')
            result+=1
return result
s1="rover"
s2="river"
print(hamming(s1,s2))

结果:在第1个位置上,字符不匹配('o'和'i')。

这个也缩进得很糟糕。你从哪里复制的?在博客文章中,代码通常呈现不佳(即使源代码是正确的)。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接