天天看點

python删除清單元素_python基礎篇-循環删除清單

先來看一段代碼:

list = [11, 22, 33, 44]for li in list: list.remove(li)print(list) # [22, 44]
           

為什麼會是這樣的結果?

我們想的可能是每一次循環周遊就删除正在循環的那個元素,最後的結果就是一個空清單。

那for循環内部到底幹了什麼呢?

python删除清單元素_python基礎篇-循環删除清單

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) # []

注意: 由于删除元素會導緻元素的索引改變, 是以容易出現問題. 盡量不要在循環中直接去删除元素. 可以把要删除的元素添加到另⼀個集合中然後再批量删除.