簡體   English   中英

Python 2.7“列表索引超出范圍”

[英]Python 2.7 “list index out of range”

我不斷收到“ IndexError:列表索引超出范圍”,代碼可以很好地處理“ s ='miruxsexxzlbveznyaidekl'”之類的問題,但是此特定長度會引發錯誤。 誰能幫我了解我在這里做錯的事情,而不僅僅是給我答案? (我不想再問更多問題哈哈)

__author__ = 'Krowzer'

s = 'abcdefghijklmnopqrstuvwxyz'

def alpha(x):
    current_substring = []
    all_substring = []

    for l in range(len(x) - 1):
        current_substring.append(x[l])
        if x[l + 1] < x[l]:
            all_substring.append(current_substring)
            #print("current: ", current_substring)
            current_substring = []

    #print(all_substring)

    largest = all_substring[0]
    for i in range(len(all_substring)):
        if len(all_substring[i]) > len(largest):
            largest = all_substring[i]
    answer = ''.join(largest)
    print('Longest substring in alphabetical order is: ' + answer )

alpha(s)

我可以嘗試解釋發生了什么。

您正在嘗試通過查找子字符串的結尾來按字母順序找到最長的子字符串。 您對end的定義是,字符串中的字符少於最后一個字符-字母降序排列。

您的示例子字符串沒有這樣的字符串。 因此,初始循環永遠不會結束。 結果, all_substring[]為空,嘗試從中取出任何元素(例如all_substring[0] )會產生錯誤。

您可以自己修復代碼。 最簡單的方法可能只是檢查它是否為空。 如果是這樣,則整個原始字符串就是匹配項。

編輯:

再三考慮,代碼中有兩個錯誤。 一個是不考慮最后一個字符。 第二個是不考慮最后的子字符串。

def alpha(x):
    current_substring = []
    all_substring = []

    for l in range(len(x)):
        current_substring.append(x[l])
        if l < len(x) - 1 and x[l + 1] < x[l]:
            all_substring.append(current_substring)
            #print("current: ", current_substring)
            current_substring = []

    print(all_substring)
    all_substring.append(current_substring)
    largest = all_substring[0]
    for i in range(len(all_substring)):
        if len(all_substring[i]) > len(largest):
            largest = all_substring[i]
    answer = ''.join(largest)
    print('Longest substring in alphabetical order is: ' + answer )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM