《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)
《 Python List列表全实例详解系列(四)》
__列表删除元素(4种方法)删除重复元素(去重)(8种方法)
我的技术成长&学习资料整理分享之路
我遇到问题查找资料时,经常会发现打开的文章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种方法)
本篇目录:
六、list 列表删除元素(4种方法)
(6.1)、del 根据索引值删除元素
(6.2)、pop() 根据索引值删除元素
(6.3)、remove() 根据元素值进行删除元素
(6.4)、clear() 删除列表所有元素
七、删除列表中重复的元素的方法
①方法一:使用set()函数去重
②方法二:使用list()+set()函数的方式
③方法三:使用count()函数和remove()函数去重
④方法四:使用列表推导的方式去重
⑤方法五:使用列表倒序remove方式去重
⑥方法六:使用while方式去重
⑦方法七:使用fromkeys()函数方式去重
⑧方法八:使用drop_duplicates()方法处理重复值去重
八、删除列表中的空值元素
方法一:使用while循环的的方式
方法二:抽取非空的列表元素,存储到新的列表中
方法三:通过count()计算空值元素个数,再遍历列表删除
六、list 列表删除元素(4种方法)
要将元素从列表中删除,处理方法有以下几种:
(1)、根据元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法;
(2)、根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法;
(3)、将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法。
(6.1)、del 根据索引值删除元素 |
|
del 根据索引值删除元素 del 用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素。del 是 Python 中的关键字。 |
|
删除列表中的单个元素 |
|
语 法 |
del listname[index] |
参 数 |
其中,listname 表示列表名称,index 表示元素的索引值。 |
删除中间一段连续的元素 |
|
语 法 |
del listname[start : end] |
参 数 |
start 表示起始索引,end 表示结束索引。 del 会删除从索引 start 到 end 之间的元素,不包括 end 位置的元素(左闭右开,含头不含尾。)。 |
对于已经创建的列表,如果不再使用,可以使用del关键字将其删除 |
|
语 法 |
del listname |
参 数 |
listname 表示要删除列表的名称 |
注 意 |
|
知识拓展 |
|
实 例 |
|
删除列表前: 删除列表中索引为4的元素后: |
|
代 码 |
代码解释:使用正数索引,从小动物列表元素中删掉"大灰狼" 代码解释: del mlist[4]删除第4个元素 mlist= ["小猫咪", "小白兔", "小青蛙", "小狗狗", "大灰狼", "小鸟"] print(mlist) del mlist[4] print(mlist) |
运行结果 |
['小猫咪', '小白兔', '小青蛙', '小狗狗', '大灰狼', '小鸟'] ['小猫咪', '小白兔', '小青蛙', '小狗狗', '小鸟'] |
删除列表前: 删除列表中索引为-2的元素后: |
|
代 码 |
代码解释:使用负数索引,从小动物列表元素中删掉"大灰狼" 代码解释: del mlist[4]删除倒数第2个元素 mlist= ["小猫咪", "小白兔", "小青蛙", "小狗狗", "大灰狼", "小鸟"] print(mlist) del mlist[-2] print(mlist) |
运行结果 |
['小猫咪', '小白兔', '小青蛙', '小狗狗', '大灰狼', '小鸟'] ['小猫咪', '小白兔', '小青蛙', '小狗狗', '小鸟'] |
代 码 |
代码解释: del mlist[4: 9] 删除从第4个元素开始,到第9个为止的元素。 mlist =["萤火明晰双眼","辨分真与假",'逆境清醒','Adversity Awake',[5,6,7],6.139,0,-1,'@y','Awake'] print(mlist) del mlist[4: 9] print(mlist) |
运行结果 |
['萤火明晰双眼', '辨分真与假', '逆境清醒', 'Adversity Awake', [5, 6, 7], 6.139,0, -1, '@y', 'Awake'] ['萤火明晰双眼', '辨分真与假', '逆境清醒', 'Adversity Awake', 'Awake'] |
代 码 |
代码解释:del mlist[-6: -1] 删除从倒数第6个元素开始,到倒数第1个为止的元素。 mlist =["萤火明晰双眼","辨分真与假",'逆境清醒','Adversity Awake', [5,6,7], 6.139,0,-1,'@y','Awake'] del mlist[-6: -1] print(mlist) |
运行结果 |
['萤火明晰双眼', '辨分真与假', '逆境清醒', 'Adversity Awake', [5, 6, 7], 6.139,0, -1, '@y', 'Awake'] ['萤火明晰双眼', '辨分真与假', '逆境清醒', 'Adversity Awake', 'Awake'] |
代码解释:mlist[0: -9]中-9超出边界,原列表不会有元素被删除 | |
代 码 |
mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist[0: -9] print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] |
代码解释:列表负索引是从-1开始的,mlist[-4: 0]超出边界,原列表不会有元素被删除 | |
代 码 |
mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist[-4: 0] print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] |
代码解释:del mlist[0: 0],从第0个元素开始,到第0个为止的元素,不存在,原列表不会有元素被删除 | |
代 码 |
mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist[0: 0] print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] |
代码解释:del mlist[0:3],删除从第0个元素开始,到第3个为止的元素 | |
代 码 |
mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist[0:3] print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[1, 8], [3, 4], [1, 6]] |
代码解释:del mlist[:] 删除整个mlist | |
代 码 |
mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist[:] print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [] |
代 码 |
代码解释:删除整个mlist mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] |
代 码 |
代码解释: 删除列表,删除列表后再打印会出错,因为del mlist删除列表的同时会删除变量名称mlist mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) del mlist print(mlist) |
运行结果 |
Traceback (most recent call last): 。。。 print(mlist) NameError: name 'mlist' is not defined |
代 码 |
|
运行结果 |
|
(6.2)、pop() 根据索引值删除元素 |
|
pop() 根据索引值删除元素 pop() 方法用来删除列表中指定索引处的元素 |
|
语 法 |
listname.pop(index),list.pop([i]) |
参 数 |
listname 表示列表名称,index 表示索引值。 list.pop([i])中的i是列表中元素的索引值,这个i用方括号包裹起来,意味着还可以不写任何索引值,就是删除列表的最后一个。 |
注 意 |
1、如果不写 index 参数,默认会删除列表中的最后一个元素,类似于数据结构中的“出栈”操作。 2、对pop方法传入一个索引,则会删除目标索引处的数值。 3、从末尾删除的话可以使用负索引。 4、第一个元素的索引为0。 |
返 回 值 |
|
知识拓展 |
一般编程语言都会提供和 pop() 相对应的方法,就是 push(),用来将元素添加到列表的尾部,即 “入栈”操作。 Python 并没有提供 push() 方法,但可以使用 append() 来代替 push() 的功能。 |
实 例 |
|
删除列表前: 删除列表中索引为4的元素后: |
|
代 码 |
代码解释:使用正数索引 mlist= ["小猫咪", "小白兔", "小青蛙", "小狗狗", "大灰狼", "小鸟"] print(mlist) mlist.pop(4) print(mlist) |
运行结果 |
['小猫咪', '小白兔', '小青蛙', '小狗狗', '大灰狼', '小鸟'] ['小猫咪', '小白兔', '小青蛙', '小狗狗', '小鸟'] |
删除列表前: 删除列表中索引为-2的元素后: |
|
代 码 |
代码解释:使用负数索引,从小动物列表元素中删掉"大灰狼" mlist= ["小猫咪", "小白兔", "小青蛙", "小狗狗", "大灰狼", "小鸟"] print(mlist) mlist.pop(-2) print(mlist) |
运行结果 |
['小猫咪', '小白兔', '小青蛙', '小狗狗', '大灰狼', '小鸟'] ['小猫咪', '小白兔', '小青蛙', '小狗狗', '小鸟'] |
删除列表前: 删除列表中索引为0的元素后: |
|
代 码 |
代码解释:删除列表中索引为0的元素 mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) mlist.pop(0) print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] |
删除列表前: 删除列表中索引为1的元素后: |
|
代 码 |
代码解释:删除列表中索引为1的元素 mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) mlist.pop(1) print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [6, 9], [1, 8], [3, 4], [1, 6]] |
删除列表前: 删除列表中索引为5的元素后: |
|
代 码 |
代码解释:删除列表中索引为5的元素 mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) mlist.pop(5) print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [7, 0], [6, 9], [1, 8], [3, 4]] |
删除列表前: |
|
代 码 |
代码解释:删除列表中索引为6的元素,列表索引边界为5,6超出索引边界 代码解释:.pop(index),index的值不能超出边界,否则会出错 mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) mlist.pop(6) print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] 。。。 mlist.pop(6) IndexError: pop index out of range |
删除列表前: 删除列表中索引为-6的元素后: |
|
代 码 |
代码解释:删除列表中索引为-6的元素 print(mlist) mlist.pop(-6) print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] |
删除列表前: 删除列表中索引为-1的元素后: |
|
代 码 |
代码解释:删除列表中索引为-1的元素 mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) mlist.pop(-1) print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [7, 0], [6, 9], [1, 8], [3, 4]] |
删除列表前: 删除mlist.pop()的元素后: |
|
代 码 |
代码解释: 如果不写 index 参数,默认会删除列表中的最后一个元素,类似于数据结构中的“出栈”操作 mlist=[[2,9],[7,0],[6,9],[1,8],[3,4],[1,6]] print(mlist) mlist.pop() print(mlist) |
运行结果 |
[[2, 9], [7, 0], [6, 9], [1, 8], [3, 4], [1, 6]] [[2, 9], [7, 0], [6, 9], [1, 8], [3, 4]] |
删除列表前: 删除mlist.pop(3)的元素后: |
|
代 码 |
代码解释:pop(index)返回从列表中移除的对象 mlist = ['莲蓉月饼', '豆沙月饼', '五仁月饼', '过期月饼','水果月饼', '冰皮月饼', '冰淇淋月饼']; print("不要的月饼: ", mlist.pop(3)) |
运行结果 |
不要的月饼: 过期月饼 |
代 码 |
|
运行结果 |
|
(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) |
运行结果 |
[] |
代 码 |
|
运行结果 |
|
(6.4)、clear() 删除列表所有元素 |
|
clear() 删除列表所有元素 用来删除列表的所有元素,也即清空列表 |
|
语 法 |
listname.clear() |
参 数 |
listname 表示列表名称。 |
注 意 |
|
返 回 值 |
|
知识拓展 |
|
实 例 |
|
代 码 |
代码解释:删除列表所有的数字元素 mlist= [4, 7, 7, 1, 9, 5, 2, 6] print(mlist) mlist.clear() print(mlist) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6] [] |
代 码 |
代码解释:删除列表所有的字符串元素,清空列表 heianlist1 = ['黑暗', '邪恶', '阴险', '毒辣','不开心','难过','误会','自私','分离','死亡'] print("原来的heianlist1是:",heianlist1) heianlist1.clear() print("现在的heianlist1是:",heianlist1) sundaylist=['温暖','友爱','关心','体贴','爱护','善良','尊重','健康'] print("现在的sundaylist是:",sundaylist) print("sundaylist里还需要补充元素,你愿意吗?") |
运行结果 |
原来的heianlist1是: ['黑暗', '邪恶', '阴险', '毒辣', '不开心', '难过', '误会', '自私', '分离', '死亡'] 现在的heianlist1是: [] 现在的sundaylist是: ['温暖', '友爱', '关心', '体贴', '爱护', '善良', '尊重', '健康'] sundaylist里还需要补充元素,你愿意吗? |
代 码 |
代码解释:当列表为空列表时,执行clear()删除列表所有元素,清空列表 mlist= [] |
运行结果 |
原来的mlist是: [] |
代 码 |
|
运行结果 |
|
七、删除列表中重复的元素的方法
①方法一:使用set()函数去重 |
|
利用 set()函数 中的元素不可重复的特性去重 去重后类型会发生改变,是无序set,所以每次顺序不一致,都会变。 |
|
实 例 |
|
代 码 |
mlist= [4, 7, 7, 1, 9, 5, 2, 6,5] print(mlist) print(set(mlist)) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5] {1, 2, 4, 5, 6, 7, 9} <class 'set'> |
输出结果为 {1, 2, 4, 5, 6, 7, 9} 类型发生改变,无序set,所以每次顺序都会变,顺序不一致 |
|
代 码 |
mlist= ['交友之道','逆境清醒','先淡后浓','先淡后浓','先疏后亲','先远后近','交友之道'] print(mlist) print(set(mlist)) print(type(set(mlist))) |
运行结果 |
['交友之道', '逆境清醒', '先淡后浓', '先淡后浓', '先疏后亲', '先远后近', '交友之道'] {'交友之道', '先远后近', '先淡后浓', '先疏后亲', '逆境清醒'} <class 'set'> |
代 码 |
mlist= ['交友之道','逆境清醒','先淡后浓','先淡后浓','先疏后亲','先远后近','交友之道'] print(mlist) print(set(mlist)) print(type(set(mlist))) |
运行结果 |
['交友之道', '逆境清醒', '先淡后浓', '先淡后浓', '先疏后亲', '先远后近', '交友之道'] {'交友之道', '逆境清醒', '先淡后浓', '先远后近', '先疏后亲'} <class 'set'> |
②方法二:使用list()+set()函数的方式 |
|
利用 set()函数 中的元素不可重复的特性去重,再把set类型强转成list类型。 去重后类型类型不改变,每次顺序不一致,都会变。 |
|
实 例 |
|
代 码 |
mlist= [4, 7, 7, 1, 9, 5, 2, 6,5] print(mlist) print(list(set(mlist))) print(type(list(set(mlist)))) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5] [1, 2, 4, 5, 6, 7, 9] <class 'list'> |
输出结果为 {1, 2, 4, 5, 6, 7, 9} 类型不改变,<class 'list'>,顺序都会变,顺序不一致 |
|
代 码 |
mlist= ['交友之道','逆境清醒','先淡后浓','先淡后浓','先疏后亲','先远后近','交友之道'] print(mlist) print(list(set(mlist))) print(type(list(set(mlist)))) |
运行结果 |
['交友之道', '逆境清醒', '先淡后浓', '先淡后浓', '先疏后亲', '先远后近', '交友之道'] ['交友之道', '逆境清醒', '先淡后浓', '先远后近', '先疏后亲'] <class 'list'> |
代 码 |
mlist= ['交友之道','逆境清醒','先淡后浓','先淡后浓','先疏后亲','先远后近','交友之道'] print(mlist) print(list(set(mlist))) print(type(list(set(mlist)))) |
运行结果 |
['交友之道', '逆境清醒', '先淡后浓', '先淡后浓', '先疏后亲', '先远后近', '交友之道'] ['交友之道', '先远后近', '先淡后浓', '先疏后亲', '逆境清醒'] <class 'list'> |
③方法三:使用count()函数和remove()函数去重 |
|
利用 count()函数统计相同的元素有多少,再用remove()删除相同的去重 |
|
实 例 |
|
代 码 |
mlist= [4, 7, 7, 1, 9, 5, 2, 6,5] print(mlist) n = 0 while n < len(mlist): if mlist.count(mlist[n]) > 1: mlist.remove(mlist[n]) continue n += 1 print(mlist) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5] [4, 7, 1, 9, 2, 6, 5] |
代 码 |
mlist= ['人只有不完美值得歌颂','逆境清醒','爱你孤身走暗巷','爱你不跪的模样','爱你对峙过绝望','不肯哭一场','战吗?','战啊!','爱你破烂的衣裳','却敢堵命运的枪','爱你和我那么像','缺口都一样','一生不借谁的光','缺口都一样','你一样骄傲着那种孤勇','战吗?','战啊!','战吗?','战啊!','以最卑微的梦','致那黑夜中的呜咽与怒吼','致那黑夜中的呜咽与怒吼','谁说站在光里的才算英雄'] print(mlist) print() n = 0 while n < len(mlist): if mlist.count(mlist[n]) > 1: mlist.remove(mlist[n]) continue n += 1 print(mlist) |
运行结果 |
['人只有不完美值得歌颂', '逆境清醒', '爱你孤身走暗巷', '爱你不跪的模样', '爱你对峙过绝望', '不肯哭一场', '战吗?', '战啊!', '爱你破烂的衣裳', '却敢堵命运的枪', '爱你和我那么像', '缺口都一样', '一生不借谁的光', '缺口都一样', '你一样骄傲着那种孤勇', '战吗?', '战啊!', '战吗?', '战啊!', '以最卑微的梦', '致那黑夜中的呜咽与怒吼', '致那黑夜中的呜咽与怒吼', '谁说站在光里的才算英雄'] ['人只有不完美值得歌颂', '逆境清醒', '爱你孤身走暗巷', '爱你不跪的模样', '爱你对峙过绝望', '不肯哭一场', '爱你破烂的衣裳', '却敢堵命运的枪', '爱你和我那么像', '一生不借谁的光', '缺口都一样', '你一样骄傲着那种孤勇', '战吗?', '战啊!', '以最卑微的梦', '致那黑夜中的呜咽与怒吼', '谁说站在光里的才算英雄'] |
④方法四:使用for循环方式去重 |
|
列表推导的方式 |
|
实 例 |
|
代 码 |
mlist= [4, 7, 7, 1, 9, 5, 2, 6,5] print(mlist) mlist1 = [] for i in mlist: if i not in mlist1: mlist1.append(i) print(mlist1) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5] [4, 7, 1, 9, 5, 2, 6] |
代 码 |
mlist= ['逆境清醒','把风云笑看','把山水静观','把花草闲赏','随心随缘','不勉强','不将就','不遗憾','把山水静观','把山水静观','把花草闲赏','随心随缘'] print(mlist) print() mlist1 = [] for i in mlist: if i not in mlist1: mlist1.append(i) print(mlist1) |
运行结果 |
['逆境清醒', '把风云笑看', '把山水静观', '把花草闲赏', '随心随缘', '不勉强', '不将就', '不遗憾', '把山水静观', '把山水静观', '把花草闲赏', '随心随缘'] ['逆境清醒', '把风云笑看', '把山水静观', '把花草闲赏', '随心随缘', '不勉强', '不将就', '不遗憾'] |
⑤方法五:使用列表倒序remove方式去重 |
|
列表推导的方式 |
|
实 例 |
|
代 码 |
mlist= ['交友之道','逆境清醒','先淡后浓','先淡后浓','先疏后亲','先远后近','交友之道','先淡后浓'] print(mlist) ''' for i in mlist[::-1]: #print(mlist.count(i)) if mlist.count(i)>1: mlist.remove(i) print(mlist) ''' [mlist.remove(i) for i in mlist[::-1] if mlist.count(i)>1] print(mlist) |
运行结果 |
['交友之道', '逆境清醒', '先淡后浓', '先淡后浓', '先疏后亲', '先远后近', '交友之道', '先淡后浓'] ['逆境清醒', '先疏后亲', '先远后近', '交友之道', '先淡后浓'] |
代 码 |
mlist= [4, 7, 7, 1, 9, 5, 2, 6,5,7,9,5] print(mlist) [mlist.remove(i) for i in mlist[::-1] if mlist.count(i)>1] print(mlist) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5, 7, 9, 5] [4, 1, 2, 6, 7, 9, 5] |
⑥方法六:使用while方式去重 |
|
列表推导的方式 |
|
实 例 |
|
代 码 |
mlist= [4,7,7,1,9,5,2,6,5,7,9,5] print(mlist) for i in mlist: while mlist.count(i)>1: del mlist[mlist.index(i)] print(mlist) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5, 7, 9, 5] [4, 1, 2, 6, 7, 9, 5] |
⑦方法七:使用fromkeys()函数方式去重 |
|
fromkeys()函数用于创建一个新字典, 利用fromkeys()函数keys()属性去重 |
|
实 例 |
|
代 码 |
mlist= [4,7,7,1,9,5,2,6,5,7,9,5] print(mlist) print(list({}.fromkeys(mlist).keys())) |
运行结果 |
[4, 7, 7, 1, 9, 5, 2, 6, 5, 7, 9, 5] [4, 7, 1, 9, 5, 2, 6] |
⑧方法八:使用drop_duplicates()方法处理重复值去重 |
|
使用drop_duplicates()方法处理重复值 dataframe.drop_duplicates(subset=‘列1’) 表示删除dataframe中列1中有重复的值所在的行,并保留重复值中第一行 |
|
实 例 |
|
代 码 |
import pandas as pd mlist=[['苹果','红色'],['雪梨','黄色'],['苹果','红色'],['雪梨','黄色'],['香蕉','黄色'],['草莓','红色'],['苹果','红色'],['苹果','青色'],['菠萝','黄色']] print(mlist) mlist=pd.DataFrame(mlist) mlist1=mlist.drop_duplicates() print(mlist1) |
运行结果 |
[['苹果', '红色'], ['雪梨', '黄色'], ['苹果', '红色'], ['雪梨', '黄色'], ['香蕉', '黄色'], ['草莓', '红色'], ['苹果', ' 红色'], ['苹果', '青色'], ['菠萝', '黄色']] 0 1 0 苹果 红色 1 雪梨 黄色 4 香蕉 黄色 5 草莓 红色 7 苹果 青色 8 菠萝 黄色 |
八、删除列表中的空值元素
实际应用中,列表中可能会有我们不需要的空值元素,为提高列表操作效率,我们有时会选择将列表中的空值元素删除。那怎样才能将列表中的空值元素删除干净呢?
有几个误区一定要注意避免:
问题代码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次 |
经过查找资料和自己思考,我发现有三种方式可以正确删除列表当中的空值元素,或许还有其他的,如有会更新此部分。
方法一:使用while循环的的方式 |
|
实 例 |
|
代 码 |
mlist = ['A','','d','v','e','','','','','','','r','s','i','t','y','','A','w','','','a','k','e'] print ("清空''前的mlist : ",mlist) print("''出现了%d次" % mlist.count('')) while "" in mlist: mlist.remove('') 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'] ''出现了0次 |
通过while循环判断是否有空值元素在列表中,如果有就通过remove删除 |
|
方法二:抽取非空的列表元素,存储到新的列表中 |
|
实 例 |
|
代 码 |
mlist = ['A','','d','v','e','','','','','','','r','s','i','t','y','','A','w','','','a','k','e'] print ("清空''前的mlist : ",mlist) print("''出现了%d次" % mlist.count('')) mlist1=[i for i in mlist if i != ""] print ("清空''后的mlist: ",mlist1) print("''出现了%d次" % mlist1.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'] ''出现了0次 |
先循环遍历有空值的列表,抽取非空的列表元素,存储到新的列表中,新的列表中没有空值元素 |
|
方法三:通过count()计算空值元素个数,再遍历列表删除 |
|
实 例 |
|
代 码 |
mlist = ['A','','d','v','e','','','','','','','r','s','i','t','y','','A','w','','','a','k','e'] print ("清空''前的mlist : ",mlist) print("''出现了%d次" % mlist.count('')) k=mlist.count('') for i in range(k): mlist.remove('') 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'] ''出现了0次 |
请点击下一章查看后续实例详解 ------》
逆境清醒 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 列表全实例详解系列(十四)》__列表练习实例 | |
推荐阅读:
14 | |
13 | 用代码过中秋,python海龟月饼你要不要尝一口? |
12 | Python List 列表(创建、索引和切片、列表反转、添加删除修改查找元素)__实例详解(全) |
11 | 用代码写出浪漫合集(python 绘制爱心、玫瑰花,字符画爱心、前端特效玫瑰、爱心) |
10 | Python函数方法实例详解全集(更新中...) |
9 | matplotlib 自带绘图样式效果展示速查(全) |
8 | 手机屏幕坏了____怎么把里面的资料导出(18种方法) |
7 | 2022年9月多家权威机构____编程语言排行榜__薪酬状况 |
6 | Python中Print()函数的用法___详解(全,例多) |
5 | 色彩颜色对照表系列(1~5)(16进制、RGB、CMYK、HSV、中英文名) |
4 | Tomcat端口配置(详细) |
3 | Tomcat 启动闪退问题解决集(八大类详细) |
2 | Apache Tomcat 各版本发行时间( v10.1.0-M17~v3.0) |
1 | Tomcat10安装(Windows环境)(详细) |
《 Python List列表全实例详解系列(四)》__列表删除元素(4种方法)删除重复元素(去重)(8种方法)相关推荐
- 《 Python List 列表全实例详解系列(九)》__列表反转(6种方法)
< Python List 列表全实例详解系列(九)> __列表反转(6种方法) 本章目录: 十一.列表反转的6种方法 (11.1).通过列表的切片操作实现列表反转 (11.2).使用列表 ...
- 《 Python List列表全实例详解系列(二)》__创建列表(5种方式)
< Python List列表全实例详解系列(二)> __创建列表(5种方式) 上一篇:< Python List 列表全实例详解系列(一)>__系列总目录.列表概念 本章目录 ...
- 《 Python List列表全实例详解系列(五)》——修改元素(修改单个、修改一组)
< Python List列表全实例详解系列(五)> --修改元素(修改单个.修改一组) 接上一篇:< Python List列表全实例详解系列(四)>__列表删除元素(4种 ...
- 《 Python List列表全实例详解系列(三)》——列表添加元素(4种方法)
< Python List列表全实例详解系列(三)> --列表添加元素(4种方法) 接上一篇:< Python List 列表全实例详解(二)>__访问列表元素(索引和切片)列 ...
- 《 Python List 列表全实例详解系列(八)》__随机列表元素
< Python List 列表全实例详解系列(八)> __随机列表元素 本章目录: 十.随机列表元素 方法1:random.shuffle 方法2:random.sample 十.随机列 ...
- SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例)
SVG实例详解系列(一) (svg概述.位图和矢量图区别(图解).SVG应用实例) 目录 一.什么是SVG? (1).位图和矢量图概念(图解) (2).SVG的小例子 (a)笑脸符 (b).小鸟 (c ...
- Element Plus 实例详解(四)___Border 边框
Element Plus 实例详解(四)___Border 边框 本文目录: 一.前言 二.搭建Element Plus试用环境 1.搭建Vue3项目(基于Vite + Vue) 2.安装Elemen ...
- 用python绘制漂亮的图形-用python绘制图形的实例详解
1.环境系统:windows10 python版本:python3.6.1 使用的库:matplotlib,numpy 2.numpy库产生随机数几种方法import numpy as npnumpy ...
- Java并发编程最佳实例详解系列
Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...
最新文章
- LaTeX 简介与安装
- 兴义高考八中2021成绩查询,兴义第八中学2021年录取分数线
- GDCM:将文件封装在RawData中的测试程序
- c++11-auto,nullptr
- Diango博客--25.使用Coverage统计测试覆盖率
- MFC开发IM-第十篇、MFC改变static text颜色
- 字符串、组合数据类型练习
- SAP Smartform转成PDF方法汇总
- java完全自学手册pdf,高级Java开发必看
- R语言快捷键大全中文版
- 企业微信支付提示请在微信客户端打开链接_微信h5支付?
- 数据库实验-- 更新语句
- Latex系列[2]--公式中的字体
- 【有奖倒计时】带你走进AI应用创新大赛十强背后的故事!
- matplotlib中的imshow()绘图长宽比例失调,调整长宽比(备忘)
- [汇编语言] 循环与分支程序设计 例题
- 导出excel工具类
- 快速在线查看字体,编辑字体
- Navicat中设计表时int类型的长度说明
- Document.location