python3 列表删除大量重复元素 remove()方法

删除列表中的元素十分简单,有很多方法。使用最多的是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)

参考博客:https://blog.csdn.net/qq_39514033/article/details/80807227?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param

posted @ 2020-08-06 00:46  菠菜猫  阅读(4454)  评论(1编辑  收藏  举报