繁体   English   中英

IndexError:字符串索引超出范围,函数出错

[英]IndexError: string index out of range, error in function

我在jupyter笔记本上的python中完成了一些代码,以分析基因序列列表。 当我运行时,它将打印两个输入字符串ab的长度。 然后给我一个错误。

下面提供了功能和错误。

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

您的string2string1短至少一个字符。 假设您有

string1 = "Hollow"
string2 = "Hello"

然后,当i == 5 ,您最终会寻找

string1[5] --> "w"
string2[5] --> IndexError

为了避免这种情况的发生,您可以将L在较短的字符串的长度上 ,如下所示:

L = min(len(string1), len(string2))

或针对长度不匹配的情况提出特殊情况(默认情况下,“汉明距离”假设字符串长度相同。如果要比较不同长度的字符串,则可能需要考虑使用Levenshtein距离,而是一个python模块 )。

如果string2小于string1,则代码中存在问题。 如果真是这样,您将最终尝试比较string2中不存在的string1中更高位置的字符。

我不确定这是否是解决此问题的正确方法,但是您可以将L定义为:

L = min(len(string1), len(string2))

这将比较尽可能多的字符,直到您到达字符串之一的末尾。

您的示例数据肯定会出现此问题。 您将比较两个字符串中的122个字符,但是对于最后一个字符,将得到此错误,因为string2中的位置122处没有字符(字符串中的第123个字符)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM