[英]Why do I get an IndexError: list index out of range
在我的代碼中,我收到一個索引錯誤 - IndexError: list index out of range。 您能否 1)解釋為什么會這樣,然后 2)對我的代碼進行一些更正? 感謝您提前回答
x = [1, 2, 3, 4, 5]
for i in range(len(x)):
if x[i] % 2 == 0:
del x[i]
改用新列表(理解):
x = [1, 2, 3, 4, 5]
y = [item for item in x if not item % 2 == 0]
print(y)
# [1, 3, 5]
或者 - 被認為是“更pythonic”:
y = [item for item in x if item % 2]
當您使用del
時,您會減小數組的大小,但初始循環會通過數組的初始大小,因此會出現 IndexError。
如果要刪除項目,我建議使用列表理解:
x = [1, 2, 3, 4, 5]
x_filtered = [i for i in x if i%2]
這是因為您正在刪除循環內的對象,換句話說,使列表更短。
而是使用這個:
x = x[0::2]
到 select 列表的每一秒值
如果您想要所有偶數值,請改用列表生成器:
x = [value for value in x in value%2 == 0]
您正在從您正在迭代的列表中刪除項目。 另一種方法是:
x = [1, 2, 3, 4, 5]
answer = [i for i in x if i % 2 != 0]
print(answer)
輸出:
[1, 3, 5]
x = [1, 2, 3, 4, 5]
for i in range(len(x) -1, -1, -1):
if x[i] % 2 == 0:
x.pop(i)
"范圍 function 需要三個 arguments。
首先是起始索引,即[list of list – 1],即最后一個列表元素的索引(因為列表元素的索引從0開始到length – 1)。
第二個參數是停止迭代的索引。
第三個參數是步長。 因為我們需要在每次迭代中將索引減少 1,所以這應該是 -1。” - 來源
我強烈推薦列表理解,但是在某些情況下沒有意義,通過迭代刪除就可以了。 隨你~
如果要刪除某些項目,請使用 while 循環而不是 for 循環。
x = [1, 2, 3, 4, 5]
i = 0
while i<len(x):
if x[i]%2==0:
del x[i]
i+=1
print(x)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.