平時開發 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、資料結構、演算法、編程、網路等各種常考題,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458121.html
標籤:其他
