为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村225694 2021-10-10 16:28:10
我是 Python 新手,我需要找到两个字符串之间的汉明距离:chaine1 = 6fb17381822a6ca9b02153d031d5d3dachaine2 = a242eace2c57f7a16e8e872ed2f2287dXOR 功能不行,我在网上搜索也不是很成功。我试图修改我在网上找到的东西,但有一些无效的语法......: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 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

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


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


查看完整回答
反对 回复 2021-10-10
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

首先应该定义两个字符串之间的汉明距离。


两根相等长度的弦之间的汉明距离是这些弦变化的位置数。用更专业的术语来说,它是衡量将一根弦变成另一根所需的最少更改次数的指标。


让我们来解决它。


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))

结果:char not match ('o', 'i') in 1


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 519 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信