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