![](/img/trans.png)
[英]IndexError: list assignment index out of range. How do I solve this?
[英]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 + 1
對res
進行了索引,對於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.