我有一个序列列表l(数千个序列):
l = [ABCD,AABA,...]
。我还有一个文件f
,其中包含许多4个字母的序列(大约一百万个)。我想为f
中的每个序列选择l
中最接近的字符串,最多可以在汉明距离为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
如果 l
和 f
很小,它可以快速运行,但对于较大的 l
和 f
来说,时间会很长。请建议一个更快的解决方案。
min(dist_array)
。 - ᴀʀᴍᴀɴ