簡體   English   中英

我收到錯誤提示 IndexError: list index out of range。 我該如何解決?

[英]I got error saying IndexError: list index out of range. how do I fix this?

   res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]      

   while not i>(len(res)-1):
        if res[i]==res[i+1]:
            answer+=2
            i+=2
        else:
            i+=1

變量“answer”應該計算彼此相鄰的重復數字。 出於某種原因,我收到錯誤消息 IndexError: list index out of range。 我該如何解決?

讓我們從稍微簡化一下代碼開始。 條件

not i > (len(res) - 1)

可以轉換為

i <= (len(res) - 1)

可以進一步轉換為

i < len(res)

這意味着i將始終小於res的長度,這使其成為有效索引。 但是,在while的正文中,在這一行:

if res[i]==res[i+1]:
    ...

我們用i + 1res進行了索引,對於i的最后一個可能值,這將是一個無效索引( i + 1將等於len(res) )。 我們必須確保不僅i小於len(res)而且i + 1小於len(res) ,從而為我們提供了這個固定版本的代碼:

while i + 1 < len(res):
    if res[i] == res[i + 1]:
        answer += 2
        i += 2
    else:
        i += 1

在您的示例res上運行此代碼會給出 4 的answer ,這看起來是正確的。

給它這種方法怎么樣?

res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]
answer = 0
start = 0
while start < len(res):
    if start + 1 < len(res):
        if res[start] == res[start + 1]:
            answer += 1
            start += 2
        else:
            start += 1
    else:
        start += 1
print(answer)

如果您還想計算重疊對,您可以使用以下方法:

res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]
for i, j in zip(res, res[1:]):
    if i == j:
        amount += 2

另一種方法可能是:

for i, _ in enumerate(res):
    if i < len(res) - 1 and res[i] == res[i+1]:
        amount += 2

暫無
暫無

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

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