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

时间:2019-01-13 20:19:24

标签: python string xor hamming-distance

我是Python的新手,我需要找到两个字符串之间的汉明距离:

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)

关于如何进行的任何想法?谢谢!

2 个答案:

答案 0 :(得分:0)

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

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所必需的。

答案 1 :(得分: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')