python3列表删除大量重复元素remove()方法的问题详解

前言

删除列表中的元素十分简单,有很多方法。使用最多的是remove方法,remove() 方法从集合中删除指定的元素。此方法与discard()方法不同,因为如果指定的项目不存在,remove() 方法将引发错误,而discard()方法不会。但是今天刚发现一个问题,remove在删除列表中重复的元素时,有时会漏掉,只删除了部分重复元素。

下面举一个例子:

删除num1列表中的0元素,思路就是遍历列表,然后删除元素。

期望输出:nums1 = [1, 2, 3]

实际输出:nums1 = [1, 2, 3, 0]

经过搜索后发现,出现以上问题的原因在于,列表的内存自动管理功能,在删除列表中的元素时,python会自动对列表内存进行收缩,并移动列表中的元素以保证元素之间没有间隙,所以使用“循环+remove()方法”来删除列表中某一重复元素时,如果存在相邻的该元素,在删除前面一个元素后,后一个元素会被移动到刚被删除的这个元素的位置,这样这个元素就“躲过了删除”

#删除num1列表中的0
nums1 = [1, 2, 3, 0, 0, 0]
  for j in nums1:
  if j == 0:
   nums1.remove(j)

解决办法:

对于以上问题,解决思路是统计列表中重复的元素,若重复元素的个数大于0,则进行remove。

 nums1 = [1, 2, 3, 0, 0, 0]
 while nums1.count(0) > 0:
  for j in nums1:
   if j == 0:
   nums1.remove(j)

参考文章:https://www.jb51.net/article/203398.htm

总结

到此这篇关于python3列表删除大量重复元素remove()方法的文章就介绍到这了,更多相关python3列表删除大量重复元素内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 使用os.remove删除文件夹时报错的解决方法

    os.remove不能用来删除文件夹,否则拒绝访问. # -*- coding:utf-8 -*-import osif __name__ == "__main__": os.remove('D:\\test') 运行结果: 删除空目录: # -*- coding:utf-8 -*-import osif __name__ == "__main__": os.rmdir('D:\\test') 如果目录不为空会报错,如下: 删除目录(不论目录是否为空): # -*-

  • 在Python的列表中利用remove()方法删除元素的教程

    remove()方法从列表中删除第一个obj. 语法 以下是remove()方法的语法: list.remove(obj) 参数 obj -- 这是可以从列表中移除该对象 返回值 此方法不返回任何值,但从列表中删除给定的对象 例子 下面的例子显示了remove()方法的使用 #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc', 'xyz']; aList.remove('xyz'); print "List : ", aList;

  • Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    本文实例讲述了Python列表list内建函数用法.分享给大家供大家参考,具体如下: #coding=utf8 ''''' 标准类型函数: cmp():进行序列比较的算法规则如下: ----------------------------------------------------------------------------- 1. 对两个列表的元素进行比较 2. 如果比较的元素是同类型的,则比较其值,返回结果 3. 如果两个元素的不是同一种类型,则检查它们是否是数字 a. 如果是数字,

  • 深入了解Python中pop和remove的使用方法

    Python关于删除list中的某个元素,一般有两种方法,pop()和remove(). remove() 函数用于移除列表中某个值的第一个匹配项. remove()方法语法: list.remove(obj) pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. pop()方法语法: list.pop(obj=list[-1]) 如果删除单个元素,使用基本没有什么问题,具体如下. 1.pop()方法,传递的是待删除元素的index: x = ['a', 'b',

  • 对python中数组的del,remove,pop区别详解

    以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下: >>> a=[1,2,3] >>> a.remove(2) >>> a [1, 3] >>> a=[1,2,3] >>> del a[1] >>> a [1, 3] >>> a= [1,2,3] >>> a.pop(1) 2 >>>

  • Python如何在循环内使用list.remove()

    代码如下 dat=['1', '2', '3', '0', '0', '0'] for item in dat: if item == '0': dat.remove(item) print(dat) #按要求是把'0'都删掉的,输出结果是['1', '2', '3', '0'] ?? 首先,remove(x) 移除的是序列首次碰到的元素x 理解: 遍历列表,item每一次都会变化,可以想象有一个指针指向后一个元素,指针是递增的,从头元素到尾元素直至遍历完. 容易想到指针 0 --> 1 -->

  • Python列表删除元素del、pop()和remove()的区别小结

    前言 在python列表的元素删除操作中, del, pop(), remove()很容易混淆, 下面对三个语句/方法作出解释 del语句 del语句可以删除任何位置处的列表元素, 若知道某元素在列表中的位置则可使用del语句. 例: >>> a = [3, 2, 2, 1] >>> del a[1] >>> a [3, 2, 1] pop()方法 pop()可删除任意位置的元素并将其返回, 只需在括号内指定要删除元素的索引即可, 当括号内为空时则删除

  • python dict remove数组删除(del,pop)

    比如代码 binfo = {'name':'jay','age':20,'python':'haha'} print binfo.pop('name')#pop方法删除键,并且返回键对应的值 print binfo##输出结果:{'python': 'haha', 'age': 20} del binfo['python']##内置方法删除元素 print binfo##输出结果:{'age': 20}

  • python for循环remove同一个list过程解析

    下午在用python将Linux的conf配置文件转化成字典dict时遇到了一个奇怪的问题,原先conf配置文件中没有注释行(以#开头的行),后来为了避免这种情况,添加了一个对以#开头的行删除的操作. 实践结果颠覆了已有的认知,直接上代码示例. 代码片段1 #!/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- import re list_to_test = ['# ', '# conf', 'NAME="Ubuntu"'

  • python删除列表元素的三种方法(remove,pop,del)

    remove 删除单个元素,删除首个符合条件的元素,按值删除,返回值为空 List_remove = [1, 2, 2, 2, 3, 4] print(List_remove.remove(2)) print("after remove", List_remove) # None # after remove [1, 2, 2, 3, 4] -------------------------------------------------------------------------

随机推荐