【问题标题】:Hamming Distance Between Two Strings In PythonPython中两个字符串之间的汉明距离
【发布时间】:2019-06-07 22:17:26
【问题描述】:

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

chaine1 = 6fb17381822a6ca9b02153d031d5d3da

chaine2 = a242eace2c57f7a16e8e872ed2f2287d

异或功能不起作用,我在网上搜索不是很成功。

我试图修改我在网上找到的东西,但是有一些无效的语法...:

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)

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

【问题讨论】:

  • 你试过什么?阅读How to Ask
  • 请编辑您的问题,而不是在 cmets 中发布代码。

标签: python string xor hamming-distance


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    两个相等长度的字符串之间的汉明距离是这些字符串变化的位置数。用更专业的术语来说,它是对将一个字符串转换为另一个字符串所需的最少更改次数的度量。

    让我们来解决它。

    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 不匹配 ('o', 'i') in 1

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2013-04-22
      相关资源
      最近更新 更多