Python列表的remove方法的注意事项
为何没有删除列表中的全部元素?
解释:
按照执行顺序,第一个空格被删除之后,后面的元素会前移(变成['空格','空格','12','23']),指针下一次会指向新列表的第二个元素(即初始状态的第三个空格),从而初始状态的第二个空格被跳过了,初始第三个空格被删除,接着后面的元素又再次前移(变成['空格','12','23']),指针指向新列表的第三个元素,即初始状态的第5个元素23,然后23被删除了,因此只剩下['空格','12']
如果想排除初始列表中的部分元素,如何实现?
由上面的情况知道,在遍历列表的同时对列表执行删除操作,会造成意外的结果,那么对初始列表进行遍历,对初始的列表的副本执行删除操作呢?
以上结果显示,没有得到预期效果。为什么?
问题出在copy=ls这一句,这里仅仅是使得copy与ls指向了同一片内存(即浅拷贝,shallow
copy),并没有执行【开辟一片新内存,并且ls内存中的内容复制到新内存,然后使copy指向新开辟的内存,即深拷贝,deep
copy】这一系列操作。因此对copy执行的remove操作,和对遍历ls列表,实质上还是都是针对同一片内存进行操作,因此结果上一个例子类似。
若想解决这一问题,有3个办法法:
(1)
ls=[' ',' ',' ','','','abc','aa']
copy=[' ',' ',' ','','','abc','aa']
这一办法对于已知列表的所有元素,且元素数量较少,结构较简单时可行,其他情况下不可行。
(2)引入copy模块的deepcopy方法:
(3)另外准备一个空列表,遍历初始列表时,将符合条件的元素逐一加入到空列表当中(利用列表的append方法)。
这种方法,思路上与remove方法相反,但执行的操作差不多,时间复杂度也与remove方法差不多,无需引入copy模块。
另外,对于列表的remove方法,python基础教程第二版给出的说明是:
remove方法用于移除列表中某个值的第一个匹配项:
>>>x=['to','be','or','not','to','be']
>>>x.remove('be')
>>>x
['to','or','not','to','be']
Python列表的remove方法的注意事项的更多相关文章
- Python列表函数和方法
Python列表函数和方法: 函数: len(列表名): 返回列表长度 # len(列表名): # 返回列表长度 lst = [1,2,3,'a','b','c'] print("lst 列 ...
- 了解Python列表的一些方法
首先定义一个名字列表,然后使用print() BIF在屏幕上显示这个列表. 接下来,使用len() BIF得出列表中有多少个数据项,然后再访问并显示第2个数据项的值: 创建了列表之后,可以使用列表方法 ...
- python列表删除--remove(),del,pop()
remove()参数为列表元素,若在列表中,删除,不在则报错 如: pop()不带参数时默认删除列表的末尾元素并返回该元素,带参数时该参数为列表元素的下标值 不带参数: 以下标为参数: del 后面可 ...
- python列表展开的方法
只有一层嵌套的常见方法: # 普通方法 list_1 = [[1, 2], [3, 4, 5], [6, 7], [8], [9]] list_2 = [] for _ in list_1: list ...
- python列表元组 魔法方法
1.元祖 count() 统计某个字符串的出现次数 tuple.count('22') 返回一个整数 index() 获取某个值出现的位置 2.列表 字符串可以直接转换列表 l ...
- Python 列表反转显示方法
第一种,使用reversed 函数,reversed返回的结果是一个反转的迭代器,我们需要对其进行 list 转换 listNode = [1,2,3,4,5] newList = list(reve ...
- Python列表list对象方法总结
- Python语言学习:列表常用的方法
python 列表常用的方法 1.append( ):用于在列表末尾添加新的对象 list.appent(obj) #obj:添加到列表末尾的对象 #!/usr/bin/python aList = ...
- Python列表操作集合
对于python列表里元素的操作主要分为以下几个方面: 1.向列表里面加元素: 向python列表里面添加元素主要有三种方法: (1)append() append()对于列表的操作主要实现的是在特定 ...
随机推荐
- GIthub的小技巧
目录: 一.快捷键一览表 二.快速搜索项目文件功能 三.使用Github Pages搭建项目网站 一.快捷键一览表 具体操作: 在各个页面下按下shift+/也就是?都可以打开键盘快捷 ...
- 配置个舒心的 Java 开发环境
Redmonk发布Java框架流行度调研结果:http://www.infoq.com/cn/news/2016/09/redmonk-java-frameworks 尝试:Intellij IDEA ...
- 网络流量监控工具----iftop
文章转自:http://www.vpser.net/manage/iftop.html.再次本人只是作为笔记使用,不做其他用途. 日常工作中用它来监控网卡的实时流量,(可以指定网段),反向解析IP.显 ...
- poj2485&&poj2395 kruskal
题意:最小生成树的最大边最小,sort从小到大即可 poj2485 #include<stdio.h> #include<string.h> #include<algor ...
- 学习笔记 --- 最大流Dinic算法
为与机房各位神犇同步,学习下网络流,百度一下发现竟然那么多做法,最后在两种算法中抉择,分别是Dinic和ISAP算法,问过 CA爷后得知其实效率上无异,所以决定跟随Charge的步伐学习Dinic,所 ...
- poj 3261 二分答案+后缀数组 求至少出现k次的最长重复子序列
#include "stdio.h" #define maxn 20010 int wa[maxn],wb[maxn],wv[maxn],ws[maxn]; int rank[ma ...
- HDU 1060 Left-most Digit
传送门 Leftmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- UVA11584 划分成回文串
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/B 紫书275 题意:输入一个字符,最少能划分几个回文串 分析 ...
- List<T> 序列化与反序列化
[Serializable] public class OrderHead { public String OrderId { get; set; } public String OrderName ...
- --------------------------PHP中访问数据库时带来的响应速度的问题解决-------------------------------------
----------------------------------------------------------------上图是秒,下图是毫秒比较TTFB-------------------- ...