python 遍历list并删除部分元素
python 遍历list并删除部分元素
https://blog.csdn.net/afgasdg/article/details/82844403
有两个list,list_1 为0-9,list_2 为0-4,需要删除list_1中包含在list_2中的元素
list_1 =[]
for i in range(10):
list_1.append(str(i))
1
2
3
1
2
3
list_1
1
1
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
1
list_2 =[]
for i in range(5):
list_2.append(str(i))
1
2
3
1
2
3
list_2
1
1
['0', '1', '2', '3', '4']
1
为了提高执行效率,可以将大的list转成set
set_2 = set(list_2)
1
1
set_2
1
1
{'0', '1', '2', '3', '4'}
1
错误删除方式1
直接遍历list并删除元素,这种方式会导致删除之后的元素前移,后漏掉一部分元素
temp = list_1[:]
for item in temp:
if item in set_2:
temp.remove(item)
1
2
3
4
1
2
3
4
"列表长度:%d, 列表:%s" % (len(temp), temp)
1
1
"列表长度:7, 列表:['1', '3', '5', '6', '7', '8', '9']"
1
错误删除方式2
使用下标遍历输出,删除元素,同样也会出现删除只有的元素前移导致漏掉部分元素
temp = list_1[:]
for i in range(len(temp)):
try:
if temp[i] in set_2:
temp.pop(i)
except:# 这里下标会越界,为了结果好看,不做处理
pass
1
2
3
4
5
6
7
1
2
3
4
5
6
7
"列表长度:%d, 列表:%s" % (len(temp), temp)
1
1
"列表长度:7, 列表:['1', '3', '5', '6', '7', '8', '9']"
1
正确方式1;倒序
倒序(保证 next 指向为未遍历过得)列表长度减少,但是next指向一直是为未遍历过的元素,并不会漏掉
temp = list_1[:]
for i in range(len(temp)-1, -1, -1):
if temp[i] in set_2:
temp.pop(i)
1
2
3
4
1
2
3
4
"列表长度:%d, 列表:%s" % (len(temp), temp)
1
1
"列表长度:5, 列表:['5', '6', '7', '8', '9']"
1
正确方式2;遍历复制数组,修改原数组
这种方式能保证遍历到所有元素
temp = list_1[:]
for item in temp[:]:
if item in set_2:
temp.remove(item)
1
2
3
4
1
2
3
4
"列表长度:%d, 列表:%s" % (len(temp), temp)
1
1
"列表长度:5, 列表:['5', '6', '7', '8', '9']"
1
正确方式3;遍历需要删除的数组
temp = list_1[:]
for item in set_2:
try:
temp.remove(item)
except: # 这里元素不存在会抛异常
pass
1
2
3
4
5
6
1
2
3
4
5
6
"列表长度:%d, 列表:%s" % (len(temp), temp)
1
1
"列表长度:5, 列表:['5', '6', '7', '8', '9']"
1
正确方式4;利用集合差集,不能保证顺序
temp = list_1[:]
temp = list(set(temp).difference(set_2))
1
2
1
2
"列表长度:%d, 列表:%s" % (len(temp), temp)
1
1
"列表长度:5, 列表:['8', '9', '5', '7', '6']"
---------------------
作者:java爱好者
来源:CSDN
原文:https://blog.csdn.net/afgasdg/article/details/82844403
版权声明:本文为博主原创文章,转载请附上博文链接!
python 遍历list并删除部分元素的更多相关文章
- python遍历当前目录并删除某文件
#coding: utf-8 """ this programe is to clear driverlog below this dir __author__:the_ ...
- js 在array的遍历操作中修改arry中元素数量 出现的一些奇特的操作
在js中array是属于复杂类型,在arr1=arr2得赋值操作中,arr1得到的值并不是arr2的value,而是一个指向引用.那么修改arr1的同时arr2读取的值也会同步变化,那么问题来了,上代 ...
- Python遍历列表删除多个列表元素
在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if ite ...
- Python简单遍历字典及删除元素的方法
Python简单遍历字典及删除元素的方法 这篇文章主要介绍了Python简单遍历字典及删除元素的方法,结合实例形式分析了Python遍历字典删除元素的操作方法与相关注意事项,需要的朋友可以参考下 具体 ...
- Python遍历列表删除多个元素或者重复元素
在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if i ...
- python遍历列表删除多个元素的坑
如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...
- python循环删除列表元素常见错误与正确方法
python循环删除列表元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 常见错误 常见错误一:使用固定长度循环删除列表元素 # 使用固定长度循环pop方法删除列表元素 num_list_ ...
- C#遍历List并删除某个或者几个元素的方法
C#遍历List并删除某个或者几个元素的方法,你的第一反应使用什么方法实现呢?foreach? for? 如果是foreach,那么恭喜你,你答错了.如果你想到的是用for,那么你只是离成功进了一步. ...
- 正确在遍历中删除List元素
最近在写代码的时候遇到了遍历时删除List元素的问题,在此写一篇博客记录一下. 一般而言,遍历List元素有以下三种方式: 使用普通for循环遍历 使用增强型for循环遍历 使用iterator遍历 ...
随机推荐
- vue手写的轮播图片,解决已经修改data中的值,页面标签已绑定,但页面没效果
1.效果 2.index.html <!DOCTYPE html> <html lang="en"> <link> <meta chars ...
- <王川自选集第一卷电子书 >读书笔记
什么叫限定自己能力的边界?就是接受承认一个事实,世界上大多数东西你并不懂,或者一知半解,懂得很肤浅.只有少数东西,由于你可以天天深入的接触,你才有深刻的理解. 购买一个公司的股票,却从未使用其核心产品 ...
- 嵌入式Linux内时区配置
一般情况下,嵌入式Linux系统的时区,也是国际事件. 但是我们是属于东八区的时区,所以有一些时候要更改一下 TZ 变量可以配置时区,如下
- STM32云平台连接培训20180814
MQTT基于TCP,发布订阅模式,一对多,多对一,TCP需要client主动建立connect,server发送connectack CoAP基于UDP,请求/应答模式,数据量也相对HTTP要小 HT ...
- Django 源码小剖: Django 中的 WSGI
Django 其内部已经自带了一个方便本地测试的小服务器, 所以在刚开始学习 Django 的时候并不需搭建 apache 或者 nginx 服务器. Django 自带的服务器基于 python w ...
- 理解Java枚举类型
(参考资料:深入理解java enum) 1.原理:对编译后的class文件javap反编译可以看出,定义的枚举类继承自java.lang.Enum抽象类且通过public static final定 ...
- Threads vs. Tasks
Posted on Friday, October 11, 2013 .Net has three low-level mechanisms to run code in parallel: Thre ...
- OpenResty 最佳实践 1
建议先搜索<OpenResty最佳实践.pdf> 到网上下载openresty-1.13.6.1-win32 考虑到操作方便性,建议建立个bin目录,放入系统目录中,生成 nginx-st ...
- USI和USCI的区别
在 MSP430 系列中微控制器中有三种串行通讯模块.它们分别是 USART . USI 和 USCI . USART 支持同一硬件模块的两种串行模式,分别是 UART 和 SPI . USART 实 ...
- duilib进阶教程 -- 图片和文字的位置调整 (5)
已经有8个晚上没写教程啦,因为之后遇到了一些问题,主要是TreeView控件的问题,这个问题搞了几个晚上,然后还需要调试代码才能知道它的用法,虽然能够调试出来,但毕竟没什么含金量,只是重复劳动而已,相 ...