我已经在jupyter笔记本上的python中完成了一些代码,以分析一系列基因序列。运行时,它会打印两个输入字符串a
和b
的长度。然后给我一个错误。
下面提供了功能和错误。
def hamming_distance(string1, string2):
distance = 1
L = len(string1)
for i in range(L):
if string1[i] != string2[i]:
distance += 1
return distance
'len a=', 123, ' lenb b', 122)
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-34-c459e7a881a4> in <module>()
2 b= Sequences.index[1]
3 print('len a=', len(a), ' lenb b', len(b))
----> 4 hamming_distance(a, b)
<ipython-input-24-c7ce8bb7c40a> in hamming_distance(string1, string2)
9 for i in range(L):
10 # Add 1 to the distance if these two characters are not equal
---> 11 if string1[i] != string2[i]:
12 distance += 1
13 # Return the final count of differences
IndexError: string index out of range
答案 0 :(得分:1)
您的string2
比您的string1
短至少一个字符。假设您有
string1 = "Hollow"
string2 = "Hello"
然后,当i == 5
时,您最终要寻找
string1[5] --> "w"
string2[5] --> IndexError
为避免这种情况的发生,您想要在较短的字符串长度处加上 cap L
,例如:
L = min(len(string1), len(string2))
或在长度不匹配时提出特殊情况(默认情况下,“汉明距离”假设字符串长度相同。如果要比较不同长度的字符串,则可能需要查找改为使用Levenshtein Distance。There is a python module for this)。
答案 1 :(得分:0)
如果string2短于string1,则代码中存在问题。如果真是这样,您将最终尝试比较string2中不存在的string1中更高位置的字符。
我不确定这是否是解决此问题的正确方法,但是您可以将L定义为:
L = min(len(string1), len(string2))
这将比较尽可能多的字符,直到到达其中一个字符串的末尾为止。
您的示例数据肯定会出现此问题。您将比较两个字符串中的122个字符,但是对于最后一个字符,您将得到此错误,因为string2中的位置122处没有字符(字符串中的第123个字符)。