Python 報錯 ValueError list.remove(x) x not in list 解決辦法

平時開發 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、數據結構、算法、編程、網絡等各種常考題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章