簡體   English   中英

我想使用 for 循環從列表中刪除重復項。我在這里遇到索引超出范圍錯誤:if lst[i]==lst[j]:

[英]I want to remove duplicates from the list using for loop.I am getting index out of bound error here:if lst[i]==lst[j]:

我已經聲明了一個列表並對其進行了排序。在迭代第二個 for 循環時,我得到:index out of range 錯誤。

lst=[]

for i in range(5):
    a=int(input())
    lst.append(a)

lst.sort()
print(lst)

for i in range(0,len(lst)):
    j=i+1
    for j in range(len(lst)):
        if lst[i]==lst[j]:
            print("hii")
            lst.pop(j)

print(lst)

當您從lst中刪除元素時,它的長度會發生變化,因此當它嘗試訪問空索引時您的迭代會中斷: “索引超出范圍”

如果你想保持你的結構,你可以捕捉它並使用 IndexError 上的 try/catch 退出循環,但這真的很難看。

一個更 Pythonic 的解決方案是簡單地將您的列表轉換為一個集合,然后返回到列表。 這是有效的,因為集合刪除了所有重復的元素:

>>> list(set([1, 1, 2, 2, 3, 4,]))
[1, 2, 3, 4]

您不應該在迭代列表時更改列表的長度,我假設您要刪除原始列表中的所有重復項。 您可以使用將列表轉換為一組

set(lst)

在排序之前或排序之后。

當您更改list的長度並對其進行迭代時,您會收到此錯誤。

list list一個set ,然后將其轉換回list - 這應該在您將list排序之前完成,因為set (根據定義)不保留排序元素。

使用您的示例:

lst = []

for i in range(5):
    a=int(input())
    lst.append(a)

lst = list(set(lst)) # Remove duplicates from list
lst.sort() # Sort list

暫無
暫無

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

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