python list remove_python list有关remove的问题
在python 中进行一次简单的列表循环,当用到remove时出现了一个很有趣的现象,
代码如下:
1 a=range(30)2 for i ina :3 if i%4!=0:4 a.remove(i)
这段代码是在a里取i 当i不能够整除4 的时候,a就在自己里面删除这个时候的i 值,最后输出的a的结果应该是[0,4,8,12,16,20,24,28],结果真的是这样吗?
1 a=range(30)2 for i ina :3 if i%4!=0:4 a.remove(i)5
6 a7 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
这个时候出现的结果完全不一样,2,6,10这些根本不对,那么为什么啊?那么这里就得说一下for in和remove了,
For in 是对下标进行操作,而remove是对值进行操作
当你执行第一个的时候,a 里面的第一个数是0 现在不符合规则,然后跳过,进行下一个循环,第二个数是1, 符合规则,把a里的1删除,现在a的表成了
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]然该第二个了,因为for in是按照下标取值的,那么第二个就成了3而不是2,这个时候就会把2跳过,以后的类似,而remove是对值进行操作,那么你i传到下面什么值,它就会删除什么值。
那么怎么该解决这样的问题呢??下面我列出了几种解决的办法,当然方法也不限于这几种,代码如下:
1 #!/usr/bin/env python
2 #-*- coding: utf-8 -*-
3 #Time : 2017-06-25 18:04
4 #Author : MrFiona
5 #File : summary_func.py
6 #Software: PyCharm Community Edition
7
8 importtime9
10 #TODO 4、list的remove的多次操作
11
12 #TODO 第一种处理方法
13 deflist_remove_func_1():14 test_remove = [652, 34, 652, 652, 418, 0, 440, 220, 652, 49, 336, 493, 510, 255, 652, 652, [1, 2], 652, 652]15 #TODO 用来标记移除的满足条件的数据的个数
16 remove_num =017 for index in range(len(test_remove) + 1):18 ifremove_num:19 #TODO 因为移除remove_num了个数据,所以test_remove数据已经减少了相应数量
20 index -=(remove_num)21 try:22 #print 'index:\t', index, test_remove[index]
23 if 652 ==test_remove[index]:24 n =test_remove[index]25 test_remove.remove(n)26 remove_num += 1
27 #print 'remove index [ %d ]\tvalue: [ %d ]' % (index, test_remove[index])
28 #TODO 因为循环次数开始已经确定为len(test_remove),随着不断的移除数据,test_remove长度在减少,所以当捕捉到
29 #TODO 的IndexError的时候处理已经完成
30 exceptIndexError:31 printtest_remove32
33
34 #TODO 第二种处理方法
35 deflist_remove_func_2():36 test_remove = [652, 34, 652, 652, 418, 0, 440, 220, 652, 49, 336, 493, 510, 255, 652, 652, [1, 2], 652, 652]37 #TODO 使用列表表达式来完成,速度增加了五六倍
38 test_remove = [ ele for ele in test_remove if ele != 652]39 #TODO 改成元祖表达式又会比列表表达式快两倍
40 test_remove = ( ele for ele in test_remove if ele != 652)41 printtest_remove42
43
44 #TODO 第三种处理方法
45 deflist_remove_func_3():46 test_remove = [652, 34, 652, 652, 418, 0, 440, 220, 652, 49, 336, 493, 510, 255, 652, 652, [1, 2], 652, 652]47 #TODO 移动次数比正常的移动次数相等,因为是在不停的检测是否还有待移除的数据,有酒移除第一个被发现的符合的数据,否则ValueError退出
48 time_count =049 try:50 while 1:51 test_remove.remove(652)52 time_count += 1
53 exceptValueError:54 pass
55 printtime_count56
57 """
58 TODO Summary:59 以移除列表1000000次为准以下几种方法所耗时间对比:60 1、list_remove_func_2中用元祖来处理:1.5452-----最快的方法61 2、list_remove_func_2中用列表来处理:3.2566-----仅次于元祖的方法62 3、list_remove_func_3方法:5.6115-----比较慢的方法63 4、list_remove_func_1方法:12.6582-----最慢的方法64 """
python list remove_python list有关remove的问题相关推荐
- python for 循环中使用 remove 删除列表中的元素
python for 循环中使用 remove 删除列表中的元素 错误的代码 # !/usr/bin/python # encoding: utf-8 # -*- coding: utf8 -*- o ...
- python中remove函数是什么意思,python中pop函数和remove函数有什么区别
python中pop函数和remove函数有什么区别 发布时间:2020-12-10 09:36:18 来源:亿速云 阅读:80 作者:小新 小编给大家分享一下python中pop函数和remove函 ...
- python中数组的del,remove,pop区别详解
以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下: >>> a=[1,2,3] >>> a.rem ...
- python:数组/列表(remove()函数、append()函数、sort()函数、reverse()函数)
排序: 1:整理顺序 #冒泡 lista = [5,7,11,19,99,63,3,9,1] list = [] while lista != []:number = 0for i in lista: ...
- python中的del,remove,pop有什么区别
python中有3个删除元素的方法:del remove pop 虽然它们都是删除元素,用于删除列表.字符串等里面的元素,但是用法可不完全一样,元组由于是不可变的,所以不能使用哦!那么接下来就来看看它 ...
- python的os库的remove可以删除只带有只读属性的_扩展库os中的方法remove()可以删除带有只读属性的文件。(2.0分)_学小易找答案...
[填空题]已知 x = {1, 2, 3},那么执行语句 x.add(3) 之后,x的值为__.(2.6分) [填空题]假设已从标准库functools导入reduce()函数,那么表达式 reduc ...
- Python 使用del函数和remove函数注意点
最近在写项目中使用到del函数和remove函数,出现了一些常识性但又容易忘记的错误,在这里记录一些,也是给自己提醒一下. 首先,del和remove的区别,很好理解. del:利用del[索引数] ...
- Linux 移除python Error: Trying to remove “yum”, which is protected
>yum intall python >yum -y remove python 出现Error: Trying to remove "yum", which is p ...
- python中del和pop的区别_python 数组的del ,remove,pop区别
以a=[1,2,3] 为例,似乎使用del, remove, pop一个元素2 之后 a都是为 [1,3], 如下: >>> a=[1,2,3] >>> a.rem ...
最新文章
- 共享文件时提示“将安全性信息应用到以下对象时发生错误”
- Linux 小知识翻译 - 「架构」(arch)
- linux下载tomcat7命令,linux下安装tomcat7.0
- boost::iterator_facade用法的测试程序
- 字体图标 —— IconMoon
- es6 includes(), startsWith(), endsWith()
- 精通Android自定义View(十三)事件分发简述
- 2021年7月国产数据库排行榜:openGauss成绩依旧亮眼,Kingbase向Top 10发起冲刺
- C++版本 ORM 访问数据库之ODB 的oracle Demo测试(二)
- WebGraph++编译
- KBQA相关论文分类整理
- 【软考】2020年下半年计算机技术与软件资格考试划水贴
- 新版FMEA软件参数图(P图)免费申请试用(FMEAHunter)
- linux安装steam提示没有32位,12.10- 试图安装 Steam 错误: 你缺少以下 32位库,并且 Steam 可能无法运行...
- 新西兰 计算机 转专业,在留学新西兰以后,半途想转专业怎么办?
- 为什么很多企业都是采用IT人力外包服务?
- python我的世界给予物品指令_我的世界指令:强大的 /give 指令
- YC创始合伙人Jessica Livingston七年经验总结:创业路上如何避开这八只拦路虎
- 为什么蓝牙电子产品要做BQB认证
- JVM面试题整理-Java内存区域与内存溢出异常、垃圾收集器和内存分配策略
热门文章
- Turbo码:3GPP TS 36.212
- 【linux指令】dialog实现终端下的GUI-1
- 西安python_西安找工作|西安人才网|西安全职招聘信息-西安58同城
- excel合并多个工作表_excel中汇总多个工作表数据的神器——合并计算
- python使用turtle步骤_Python+turtle交互式绘图:可以用鼠标拖动的小海龟
- Flink的定时器(EventTime和ProcessTime)
- nodejs文件写入
- MAX_VALUE的最大值和最小值是多少
- mybatis 详解------ 一级缓存、二级缓存(九)
- idea导入java项目类上面显示红色的J符号解决办法