刪除列表中的元素十分簡單,有很多方法。使用最多的是remove方法,但是今天剛發現一個問題,remove在刪除列表中重復的元素時,有時會漏掉,只刪除了部分重復元素。
下面舉一個例子:
刪除num1列表中的0元素,思路就是遍歷列表,然后刪除元素。
期望輸出:nums1 = [1, 2, 3]
實際輸出:nums1 = [1, 2, 3, 0]
經過搜索后發現,出現以上問題的原因在於,列表的內存自動管理功能,在刪除列表中的元素時,python會自動對列表內存進行收縮,並移動列表中的元素以保證元素之間沒有間隙,所以使用“循環+remove()方法”來刪除列表中某一重復元素時,如果存在相鄰的該元素,在刪除前面一個元素后,后一個元素會被移動到剛被刪除的這個元素的位置,這樣這個元素就“躲過了刪除”
1 #刪除num1列表中的0 2 nums1 = [1, 2, 3, 0, 0, 0] 3 for j in nums1: 4 if j == 0: 5 nums1.remove(j) 6
解決辦法:
對於以上問題,解決思路是統計列表中重復的元素,若重復元素的個數大於0,則進行remove。
1 nums1 = [1, 2, 3, 0, 0, 0] 2 while nums1.count(0) > 0: 3 for j in nums1: 4 if j == 0: 5 nums1.remove(j)