[英]Why am I getting list index out of range in Python?
我最近在這里問了一個問題: 如何查找一個int是否在數組數組中? 該解決方案效果很好。 我正在嘗試編寫代碼,如果另一個數組不包含int,它將從數組中刪除一個int。 我要使用的循環是:
for index in range(len(numbers)):
if not any(numbers[index] in elem[:2] for elem in numbers2):
numbers.remove(numbers[index])
假設numbers = [1, 2, 4]
, numbers = [1, 2, 4]
numbers2 = [[4,5,6], [2,8,9]]
則循環后,數字[]應為numbers = [2, 4]
。 但是上面的循環一直在產生錯誤exceptions.IndexError: list index out of range
但是我看不到為什么錯誤總是被拋出。 有人可以解決這個問題嗎?
問題是在循環開始時, len(numbers)
僅被評估一次。
我會像這樣重寫整個事情:
In [12]: numbers = [1, 2, 4]
In [13]: numbers2 = [[4,5,6], [2,8,9]]
In [15]: n2s = set(reduce(operator.add, (n[:2] for n in numbers2)))
In [17]: [n for n in numbers if n in n2s]
Out[17]: [2, 4]
創建一個臨時列表並保存要刪除的位置,然后在完成所有迭代之后刪除這些位置中的項目。 記住要以相反的順序刪除,以在刪除時保留索引號。
to_remove = []
for index, number in enumerate(numbers):
if not any(number in elem[:2] for elem in numbers2):
to_remove.append(index)
for index in reversed(to_remove):
del numbers[index]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.