Python中遍历列表remove漏删解决方案
文章目录
- 需求及背景
- 解决办法
- 方案一(快捷)
- 方案二(简单)
- 方案三(粗暴)
- 方案四(灵活)
需求及背景
我有一个需求:保留list_1中含有list_2元素的元素,其他的删除
list_1 = ['魁哥','夭夭', '阿离', '渣姐', '秃头企鹅', '王哥', '小白', '卷魔']
list_2 = ['旺仔', '秃头企鹅', '王哥']
最后需要输出
['秃头企鹅', '王哥']
直接一顿操作,写出了如下代码
for i in list_1:if i not in list_2:list_1.remove(i)
print(list_1)
结果输出的结果是
['夭夭', '渣姐', '秃头企鹅', '王哥', '卷魔']
为什么会这样?通过debug发现,每删除一个元素,list_1里面的元素下标就会发生变化,而for循环里面是持续性的读取下一个值的,每次删除一个的时候,便会跳过一个。
既然如此我就是用下标删呗
for i in range(len(list_1)):if list_1[i] not in list_2:list_1.remove(list_1[i])continue
print(list_1)
这时候又发现,直接报错
IndexError: list index out of range
当删除一个元素之后,新列表的长度减少,i 还是根据原来列表的索引取值,当 i 超过当前的列表长度时,新列表没有该下标对应元素,索引越界。
解决办法
方案一(快捷)
list_1 = ['夭夭', '阿离', '渣姐', '秃头企鹅', '魁哥', '小白', '卷魔']
list_2 = ['旺仔', '秃头企鹅', '王哥']
j = 0
for i in range(len(list_1)):if list_1[j] not in list_2:list_1.remove(list_1[j])continuej+=1
print(list_1)
方案一方法的思路:
每次只要删除了,都从上一次的下标继续,如果这次没删除,则下标加一删下一个。看不太懂的可以丢自己编辑器里面加一些print进行分步分析。
输出
['秃头企鹅', '王哥']
方案二(简单)
倒序
如果让索引倒序遍历列表就不会出现越界的问题了。
for i in range(len(list_1)-1,-1,-1):if list_1[i] not in list_2:list_1.remove(list_1[i])
print(list_1)
方案二方法思路:
将索引倒序,这样不管你怎么删,我下标都是倒着来,肯定不会下标越界。(此方法对应解决最开始的下标越界的思路。)
注意细节:(自己多尝试,多写)
①len减一是因为左闭右开;
②第三个参数表示的是对数值所进行的操作,每次加上-1;
③第二个值表示最终加到-1,但不包含-1。(最终加到几,但是不包含本身)
输出
['秃头企鹅', '王哥']
方案三(粗暴)
while True:for i in list_1:if i not in list_2:list_1.remove(i)breakelse:break
print(list_1)
方案三思路:
无限循环,知道你搞完,这个不多解释,就是莽夫。
输出
['秃头企鹅', '王哥']
方案四(灵活)
d = dict(zip(range(len(list_1)),list_1))
for k,v in d.items():if v not in list_2:d[k]=[]
final_1 = [v for k,v in d.items() if v]
print(final_1)
方案四思路:
讲列表转换成字典,再通过字典的value和list_2进行对比,如果不是list_2中的元素则赋值为空列表,最后拿到不是空列表的value,就是我们需要的列表了。
听起来会有点绕,自己尝试一下,一下就练了字典、列表、遍历、推导式、列表合并字典这些知识点哦。
输出
['秃头企鹅', '王哥']
上面用例列表推导式,zip,dict等方法,这些python基础我之前文章有写,大家可以多翻翻。(如果没有,那肯定是我不小心删了。)
最后,祝大家周末愉快!
gzh:梦无矶的测试开发之路
Python中遍历列表remove漏删解决方案相关推荐
- python遍历是什么意思_在Python中遍历列表的方法有哪些
Python中遍历列表有以下几种方法: 一.for循环遍历lists = ["m1", 1900, "m2", 2000] for item in lists: ...
- python中遍历列表和字典的方法
一般来说,在python中使用遍历是非常简单的,只要通过for循环就可以了,但是还是有一些技巧可以使用. 列表的遍历 方法一:通过for循环 li = [i for i in range(10)] f ...
- 数据分析系列 之python中遍历列表的几种方法
1 引入: 接触过C++.java和python,目前经常使用的是java,C++和python也忘的差不多啦哈哈-但是呢python现在经常使用,写脚本做数据处理等如果现查资料,感觉也挺不方便的.干 ...
- python 遍历_Python中遍历列表的方法总结
Python中遍历列表有以下几种方法: 一.for循环遍历 lists = ["m1", 1900, "m2", 2000] for item in lists ...
- 零基础Python完全自学教程15:Python中的列表
欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第14课< Python中的列表 >.本节课是一个大课,我分了这些知识点进行 ...
- python 下标 遍历列表_python 遍历列表提取下标和值的实例
python 遍历列表提取下标和值的实例 如下所示: for index,value in enumerate(['apple', 'oppo', 'vivo']): print(index,valu ...
- python多维列表索引越界怎么处理_Python中remove漏删和索引越界问题的解决
list.remove方法在删除元素的时候往往会出现漏删或者索引越界的情况示例如下: 漏删: lst=[9,25,12,36] for i in lst: if i>10: lst.remove ...
- python 下标 遍历列表_python中的数据结构与算法(1):列表、元组与字符串
列表是 python 中最常用.最重要的数据结构之一. 一般来说,我们用列表来管理一组数据对象,这些对象可能是同一类型,也可能是不同类型.列表不仅记录了这些数据对象,而且也记录了它们之间的一种顺序关系 ...
- python如何创建函数对列表里的元素进行分类_zip()函数如何在python中遍历多个列表?...
在对列表的元素进行找寻时,会频繁的说到遍历的理念.对于复杂的遍历要求,如多个列表中查找就显然不适合用for循环.本篇所要带来的是zip() 函数的方法,能够对多个迭代器进行遍历.下面我们就python ...
最新文章
- Linux C++/Java/Web/OC Socket网络编程
- SAP Explore hidden functions in MD04
- 简单又实用的pandas技巧:如何将内存占用降低90%
- linux c brotli压缩简介
- 程序猿必备的硬核知识,你知道哪些?
- ubuntu/deepin常用软件清单(都是使用sudo apt-get install安装方式)
- centos下利用httpd搭建http服务器方法
- JAVA知识基础(五):深入理解final关键字
- rust腐竹是什么意思_学习Rust 集合与字符串
- 算法岗百里挑一热爆了,全球AI大厂薪酬大起底
- 1、微博RPC框架Motan
- 织梦dedecms包装设计生产公司网站模板(中英文版)
- javaweb超市商品库存信息管理系统报告
- 史上最牛12306抢票攻略
- 京东架构师讲解京东是如何优化列表页的
- 从DDR到DDR4,内存核心频率其实基本上就没太大的进步
- OpenStack-Keystone组件部署 超级详细!!!
- 吐故“钠”新,看钠离子电池如何引导行业新风向
- 专题10:如何应对面试官的拷问—你了解python的装饰器吗?
- 理解WebSocket协议中控制帧:close、ping、pong