平時開發 Python 代碼過程中,經常會遇到這個報錯:
ValueError: list.remove(x): x not in list
錯誤提示信息也很明確,就是移除的元素不在列表之中。
比如:
>>> lst = [1, 2, 3]
>>> lst.remove(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
但還有一種情況也會引發這個錯誤,就是在循環中使用 remove
方法。
舉一個例子:
>>> lst = [1, 2, 3]
>>> for i in lst:
... print(i, lst)
... lst.remove(i)
...
1 [1, 2, 3]
3 [2, 3]
>>>
>>> lst
[2]
輸出結果和我們預期並不一致。
如果是雙層循環呢?會更復雜一些。再來看一個例子:
>>> lst = [1, 2, 3]
>>> for i in lst:
... for a in lst:
... print(i, a, lst)
... lst.remove(i)
...
1 1 [1, 2, 3]
1 3 [2, 3]
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: list.remove(x): x not in list
這樣的話輸出就更混亂了,而且還報錯了。
那怎么解決呢?辦法也很簡單,就是在每次循環的時候使用列表的拷貝。
看一下修正之后的代碼:
>>> lst = [1, 2, 3]
>>> for i in lst[:]:
... for i in lst[:]:
... print(i, lst)
... lst.remove(i)
...
1 [1, 2, 3]
2 [2, 3]
3 [3]
這樣的話就沒問題了。
以上就是本文的全部內容,如果覺得還不錯的話,環境點贊,轉發和關注,感謝支持。
推薦閱讀: