我遇到问题查找资料时,经常会发现打开的文章10篇中有9篇基本是一样的,费时费力,于是萌生了分享整理好的资料的念头。
2022年5月开启了我的第一个也是唯一的一个博客:https://blog.csdn.net/weixin_69553582?type=blog,博客名:逆境清醒。
我的博客文章不多,39篇,但大多数都是1万字左右认真整理的学习经验资料。
我没有向任何人推我的博客,点赞收藏全凭文章阅读者自己判断是否有用:





评论不多,但每一个都是发自自愿的评论,给了我文章的肯定。这就是我在自己学习过程中分享学习资料的意义。让我开始写《 Python List列表全实例详解系列》。现在这篇《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)就是其中一篇。
在编程开发中,我们经常会踩坑,以为代码没有错,可结果往往出乎我们意料。
发生这种bug的原因在于我们对基础知识掌握不够全面,理解不透彻。
例如,我们用listname.remove(i)删除2列表时,
当重复的数据都是不相邻的情况下,使用一般的remove()代码循环就能够达到预期的删除效果。
mlist=[3,2,3,8,3,2,5]
print("原列表是:",mlist)
for i in mlist:
if i==3:
mlist.remove(i)
print("删除重复数3后的列表是:",mlist)
运行结果
原列表是: [3, 2, 3, 8, 3, 2, 5]
删除重复数3后的列表是: [2, 8, 2, 5]
当重复的数据当中有重复数据是相邻的情况下,有的时候只能删除部分重复元素,不能达到我们想要的删除所有重复元素的效果,这时需要在代码当中添加一些判断。
mlist=[3,2,3,3,8,2,5]
print("原列表是:",mlist)
for i in mlist:
if i==3:
mlist.remove(i)
print("删除重复数3后的列表是:",mlist)
运行结果
原列表是: [3, 2, 3, 3, 8, 2, 5]
删除重复数3后的列表是: [2, 3, 8, 2, 5]
解释: 运行结果还有重复数3未能删除,说明代码需要改进。
在列表的for循环过程中,删除一个元素将使所有后续元素向左移动一个位置,而i却是在最初就已经确定了,因此在下一次迭代中,一个元素将被跳过,普通操作并不能得到想要的结果(remove()清空列表)。for语句正序使用remove()不能清空列表,注意不要踩坑。
下面让我们一起学习一下list列表删除相关的知识吧
接上一篇:《 Python List 列表全实例详解系列(三)》__列表添加元素(4种方法)

本篇目录:
⑧方法八:使用drop_duplicates()方法处理重复值去重

要将元素从列表中删除,处理方法有以下几种:
(1)、根据元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法;
(2)、根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法;
(3)、将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法。
(6.3)、remove() 根据元素值进行删除元素 | |
| remove() 根据元素值进行删除 该方法会根据元素本身的值来进行删除操作。 | |
| 语 法 | listname.remove(value) |
| 参 数 | listname 表示列表名称,value表示值。 |
| 注 意 | 1、remove() 方法只会删除第一个和指定值相同的元素,而且必须保证该元素是存在的,否则会引发 ValueError 错误。所以我们在使用 remove() 删除元素时最好提前判断一下。 2、在列表的for循环过程中,删除一个元素将使所有后续元素向左移动一个位置,而i却是在最初就已经确定了,因此在下一次迭代中,一个元素将被跳过,普通操作并不能得到想要的结果。 |
| 返 回 值 | |
| 知识拓展 | 1、for语句正序使用remove()不能清空列表,注意不要踩坑。 2、实际应用当中有时可能需要删除列表中某一大量重复的数据,当重复的数据都是不相邻的情况下,使用一般的remove()代码循环就能够达到预期的删除效果。 但当重复的数据当中有重复数据是相邻的情况下,有的时候只能删除部分重复元素,不能达到我们想要的删除所有重复元素的效果,这时需要在代码当中添加一些判断。详细见实例部分代码 |
| 实 例 | |
| 删除列表前:
删除mlist.pop(3)的元素后:
| |
| 代 码 | 代码解释:使用remove(),从小动物列表元素中删掉"大灰狼" mlist= ["小猫咪", "小白兔", "小青蛙", "小狗狗", "大灰狼", "小鸟"] mlist.remove("大灰狼") print(mlist) |
| 运行结果 | ['小猫咪', '小白兔', '小青蛙', '小狗狗', '大灰狼', '小鸟'] ['小猫咪', '小白兔', '小青蛙', '小狗狗', '小鸟'] |
| 代 码 | 代码解释: remove()只能删除指定值的列表元素或者第一个元素,如果列表中有两个相同的值,只会删除第一个,如果要清除列表中其他具有相同的值,就必须多次执行remove() mlist= [4, 7, 7, 1, 9, 5, 2, 6] print(mlist) 代码解释:第一次删除7 mlist.remove(7) print(mlist) 代码解释:第二次删除7 mlist.remove(7) print(mlist) |
| 运行结果 | [4, 7, 7, 1, 9, 5, 2, 6] [4, 7, 1, 9, 5, 2, 6] [4, 1, 9, 5, 2, 6] |
| 代 码 | 代码解释:remove(),如果元素不存在,会返回ValueError错误 mlist= [4, 7, 7, 1, 9, 5, 2, 6] mlist.remove(100) |
| 运行结果 | Traceback (most recent call last): 。。。 mlist.remove(100) ValueError: list.remove(x): x not in list |
| 代 码 | 代码解释:当重复的数据都是不相邻的情况下,使用一般的remove()代码循环就能够达到预期的删除效果。 mlist=[3,2,3,8,3,2,5] print("原列表是:",mlist) for i in mlist: if i==3: mlist.remove(i) print("删除重复数3后的列表是:",mlist) |
| 运行结果 | 原列表是: [3, 2, 3, 8, 3, 2, 5] 删除重复数3后的列表是: [2, 8, 2, 5] |
| 代 码 | 代码解释:当重复的数据当中有重复数据是相邻的情况下,有的时候只能删除部分重复元素,不能达到我们想要的删除所有重复元素的效果,这时需要在代码当中添加一些判断。 mlist=[3,2,3,3,8,2,5] print("原列表是:",mlist) for i in mlist: if i==3: mlist.remove(i) print("删除重复数3后的列表是:",mlist) |
| 运行结果 | 原列表是: [3, 2, 3, 3, 8, 2, 5] 删除重复数3后的列表是: [2, 3, 8, 2, 5] 解释: 运行结果还有重复数3未能删除,说明代码需要改进。 |
| 代 码 | 代码解释:倒序后,能够正常得到结果的程序代码 mlist=[3,2,3,3,8,2,5] print("原列表是:",mlist) for i,item in enumerate(mlist[::-1]): if item==3: mlist.remove(item) print("删除重复数3后的列表是:",mlist) |
| 运行结果 | 原列表是: [3, 2, 3, 3, 8, 2, 5] 删除重复数3后的列表是: [2, 8, 2, 5] |
| 代 码 | 代码解释:在原列表中筛选大于28的数据组成列表,不符合要求的数据删除。此代码不能达到我们想要的效果。 mlist=[48,92,28,28,43,23,83,25,28] print("原列表是:",mlist) for i in mlist: if i>28: pass else: mlist.remove(i) print("筛选大于28的数据组成的列表是:",mlist) |
| 运行结果 | 原列表是: [48, 92, 28, 28, 43, 23, 83, 25, 28] 筛选大于28的数据组成的列表是: [48, 92, 28, 43, 83, 28] 解释: 运行结果还有重复数28未能全部筛选删除,说明代码需要改进。 |
| 代 码 | 代码解释:在原列表中筛选大于28的数据组成列表,不符合要求的数据删除。倒序后,能够正常得到结果的程序代码 mlist=[48,92,28,28,43,23,83,25,28] print("原列表是:",mlist) for i in mlist[:]: if i>28: pass else: mlist.remove(i) print("筛选大于28的数据组成的列表是:",mlist) |
| 运行结果 | 原列表是: [48, 92, 28, 28, 43, 23, 83, 25, 28] 筛选大于28的数据组成的列表是: [48, 92, 43, 83] |
| 代 码 | 代码解释:for语句正序使用remove()不能清空列表,注意不要踩坑 mlist = [1,2,3,4,5,6,7,8] for i in mlist: mlist.remove(i) print(mlist) |
| 运行结果 | [2, 4, 6, 8] |
| 代 码 | 代码解释:清空列表方法1 mlist = [1,2,3,4,5,6,7,8] while i:=len(mlist): mlist.remove(i) i-=i print(mlist) |
| 运行结果 | [] |
| 代 码 | 代码解释:清空列表方法2 mlist = [1,2,3,4,5,6,7,8] for i in mlist.copy(): mlist.remove(i) print(mlist) |
| 运行结果 | [] |
| 代 码 | 代码解释:清空列表方法3 mlist = [1,2,3,4,5,6,7,8] for i in mlist[:]: mlist.remove(i) print(mlist) |
| 运行结果 | [] |
| 代 码 | 代码解释:清空列表方法4 mlist = [1,2,3,4,5,6,7,8] for i in mlist [::-1]: mlist.remove(i) print(mlist) |
| 运行结果 | [] |
| 代 码 | |
| 运行结果 | |
实际应用中,列表中可能会有我们不需要的空值元素,为提高列表操作效率,我们有时会选择将列表中的空值元素删除。那怎样才能将列表中的空值元素删除干净呢?
有几个误区一定要注意避免:
| 问题代码1 | |
| 代 码 | mlist = ['A','','d','v','e','','','','','','','r','s','i','t','y','','A','w','','','a','k','e'] print ("清空''前的mlist : ",mlist) print("''出现了%d次" % mlist.count('')) for i in mlist: if i == '': mlist.remove(i) print ("清空''后的mlist: ",mlist) print("''出现了%d次" % mlist.count('')) |
| 运行结果 | 清空''前的mlist : ['A', '', 'd', 'v', 'e', '', '', '', '', '', '', 'r', 's', 'i', 't', 'y', '', 'A', 'w', '', '', 'a', 'k', 'e'] ''出现了10次 清空''后的mlist: ['A', 'd', 'v', 'e', '', 'r', 's', 'i', 't', 'y', '', 'A', 'w', '', '', 'a', 'k', 'e'] ''出现了4次 |
说明代码有问题,不能全部清除列表当中的空值元素,还有4个空值元素留在列表里。
| 问题代码2 | |
| 代 码 | mlist = ['A','','d','v','e','','','','','','','r','s','i','t','y','','A','w','','','a','k','e'] print ("清空''前的mlist : ",mlist) print("''出现了%d次" % mlist.count('')) for i in mlist: if len(i) == 0: mlist.remove(i) print ("清空''后的mlist: ",mlist) print("''出现了%d次" % mlist.count('')) |
| 运行结果 | 清空''前的mlist : ['A', '', 'd', 'v', 'e', '', '', '', '', '', '', 'r', 's', 'i', 't', 'y', '', 'A', 'w', '', '', 'a', 'k', 'e'] ''出现了10次 清空''后的mlist: ['A', 'd', 'v', 'e', '', 'r', 's', 'i', 't', 'y', '', 'A', 'w', '', '', 'a', 'k', 'e'] ''出现了4次 |
经过查找资料和自己思考,我发现有三种方式可以正确删除列表当中的空值元素,或许还有其他的,如有会更新此部分。
请点击下一章查看后续实例详解 ------》
| 逆境清醒 Python List列表——全实例详解系列 | ||
![]() | ||
| 1 | 《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念 | |
| 2 | 《 Python List 列表全实例详解系列(二)》__创建列表(5种方法) | |
| 3 | 《 Python List 列表全实例详解系列(三)》__列表添加元素(4种方法) | |
| 4 | 《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素方法 | |
| 5 | 《 Python List 列表全实例详解系列(五)》__修改元素(修改单个、修改一组) | |
| 6 | 《 Python List 列表全实例详解系列(六)》__查找元素 | |
| 7 | 《 Python List 列表全实例详解系列(七)》__索引和切片 | |
| 8 | 《 Python List 列表全实例详解系列(八)》__随机列表元素 | |
| 9 | 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法) | |
| 10 | 《 Python List 列表全实例详解系列(十)》__清空列表 | |
| 11 | 《 Python List 列表全实例详解系列(十一)》__列表运算符 | |
| 12 | 《 Python List 列表全实例详解系列(十二)》__列表内置及常用函数 | |
| 13 | 《 Python List 列表全实例详解系列(十三)》__相关技巧 | |
| 14 | 《 Python List 列表全实例详解系列(十四)》__列表练习实例 | |
推荐阅读:
| 29 |
| svg实例详解系列 |
| 28 |
| |
| 27 |
| |
| 26 |
| 2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子 |
| 25 |
| 2023春节祝福系列第一弹(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载) |
| 24 |
| |
| 23 |
| |
| 22 |
| |
| 21 |
| python爱心源代码集锦 |
| 20 |
| 巴斯光年python turtle绘图__附源代码 |
| 19 |
| Three.js实例详解___旋转的精灵女孩(附完整代码和资源) |
| 18 |
| |
| 17 |
| |
| 16 |
| |
| 15 |
| |
| 14 |
| |
| 13 |
| |
| 12 |
| |
| 11 |
| 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心) |
| 10 |
| |
| 9 |
| |
| 8 |
| |
| 7 |
| |
| 6 |
| |
| 5 |
| |
| 4 |
| |
| 3 |
| |
| 2 |
| |
| 1 |
|