平時開發 Python 代碼過程中,經常會遇到這個報錯: ValueError: list.remove(x): x not in list 錯誤提示信息也很明確,就是移除的元素不在列表之中。 比如: >>> lst = [1, 2, 3] >>> lst.remove(4) Traceback ( ...
平時開發 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]
這樣的話就沒問題了。
以上就是本文的全部內容,如果覺得還不錯的話,環境點贊,轉發和關註,感謝支持。
推薦閱讀:
- 電腦經典書籍
- 技術博客: 硬核後端開發技術乾貨,內容包括 Python、Django、Docker、Go、Redis、ElasticSearch、Kafka、Linux 等。
- Go 程式員: Go 學習路線圖,包括基礎專欄,進階專欄,源碼閱讀,實戰開發,面試刷題,必讀書單等一系列資源。
- 面試題彙總: 包括 Python、Go、Redis、MySQL、Kafka、數據結構、演算法、編程、網路等各種常考題。