1. ホーム
  2. python

[解決済み] Pythonで2つの文字列の間のハミング距離

2022-02-11 04:54:26

質問

私はPythonの初心者ですが、2つの文字列の間のハミング距離を求める必要があります。

chaine1 = 6fb17381822a6ca9b02153d031d5d3da

chaine2 = a242eace2c57f7a16e8e872ed2f2287d

XOR関数がうまくいかず、Webで検索してもあまりうまくいかなかった。

Webで見つけたものを改造しようとしたら、無効な構文があるんだけど......。

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種類の方法でハミング距離を計算するプログラムです。

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で必要とされるインデントがないのでしょう。