簡體   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