從列表中刪除項目時循環不正確
迭代列表並刪除循環內的項目時,您可能會遇到意外行為。考慮以下代碼:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
print(letters)
此程式碼不會如預期般刪除所有項目,而是產生以下輸出:
['b', 'd', 'f', 'h', 'j', 'l']
Python 文件解釋了這種看似奇怪的行為:
[I]修改循環中迭代的序列是不安全的。如果您需要修改正在迭代的列表,則必須迭代副本。
在這種特定情況下,迭代變數 i 在刪除一個項目後得到更新,導致下一個項目的索引要跳過的循環。
重寫以實現準確的項目刪除
要糾正此行為,您應該迭代列表的副本或使用替代方法來刪除項目。這裡有三個選項:
del letters[:]
letters[:] = []
letters = []
或者,如果您需要根據條件刪除特定項目,您可以使用理解式或filter() 函數:
letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]
letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))
透過遵循這些準則,您可以確保從Python 中的清單中準確且有效率地刪除項目。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3