簡體   English   中英

為什么我得到一個 IndexError: list index out of range

[英]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.

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