簡體   English   中英

為什么我的列表索引超出了Python的范圍?

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

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