先來看一段代碼:
list = [11, 22, 33, 44]for li in list: list.remove(li)print(list) # [22, 44]
為什麼會是這樣的結果?
我們想的可能是每一次循環周遊就删除正在循環的那個元素,最後的結果就是一個空清單。
那for循環内部到底幹了什麼呢?

for的運⾏過程. 會有⼀個指針來記錄目前循環的元素是哪⼀個, ⼀開始這個指針指向第0個. 然後擷取到第0個元素. 緊接着删除第0個. 這個時候. 原來是第⼀個的元素會⾃動的變成第0個. 然後指針向後移動⼀次, 指向1元素. 這時原來的1已經變成了0, 也就不會被删除了.
那pop和del可不可以呢?
list = [11, 22, 33, 44]for li in list: list.pop()print(list) # [11, 22]list = [11, 22, 33, 44]for li in list: del list[li]print(list) # 報錯IndexError: list assignment index out of range
答案是否定的。
那到底怎樣循環删除清單呢?
# 方式一
list = [11, 22, 33, 44]
for i in range(0, len(list)):
list.pop()
print(list) # []
# 方式二
list = [11, 22, 33, 44]
new_list = []
for li in list:
new_list.append(li)
for li in new_list:
list.remove(li)
print(list) # []
注意: 由于删除元素會導緻元素的索引改變, 是以容易出現問題. 盡量不要在循環中直接去删除元素. 可以把要删除的元素添加到另⼀個集合中然後再批量删除.