我有序列L的列表(序列的1000多家公司)l = [ABCD,AABA,...].我还有一个f包含许多4个字母序列的文件(大约一百万个).我想l为每个序列选择最接近的字符串,f最多为汉明距离2,并更新计数器good_count.我为此编写了以下代码,但速度非常慢.我想知道它是否可以更快地完成.
def hamming(s1, s2):
if len(s1) != len(s2):
raise ValueError("Undefined for sequences of unequal length")
return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
f = open("input.txt","r")
l = [ABCD,AABA,...]
good_count = 0
for s in f:
x = f.readline()
dist_array = []
for ll in l:
dist = hamming(x,ll)
dist_array.append(dist)
min_dist = min(dist_array)
if min_dist <= 2:
good_count += 1
print good_count
Run Code Online (Sandbox Code Playgroud)
它的工作原理快,如果l和f虽小,但花费大量时间过长l和f.请建议更快的解决方案.
使用现有的库,例如 jellyfish:
from jellyfish import hamming_distance
Run Code Online (Sandbox Code Playgroud)
这为您提供了汉明距离的 C 实现。