python列表删除元素及remove的奇怪现象
2018-06-18 03:20:55来源:未知 阅读 ()
先看一个例子:
test1 = ['a','b','c','','']
for i in test1: if i == '': test1.remove(i) #删除空元素 print(test1)
>>>['a', 'b', 'c', '']
这时发现并没有达到我们想要的结果,原因分析如下:
要了解一下python列表的数据结构,列表属于连续线性表,它的连续在于有一块连续的内存储存着列表中元素的地址,如图(忽略地址与值所占的字节,只为方便举例子):
当然也可以通过一个代码来看证明一下:
a=[1,2,3] for i in a: print(id(i))
>>>1514106336 #此地址即为左边的连续地址
1514106368
1514106400
回到问题,当我们删除test1中的空字符时,test1 = ['a','b','c','',''],for in 是对下标进行操作,而remove是对值进行操作,当for到达索引为3,即第一个空字符位置时,
符合条件即删除,后面的那个空字符的索引成为了3,此时对于for循环已经完成任务,故剩余一个空字符。
还有一个简单的小例子:
a=[1,2,3] for i in a: print(i,id(i)) print("------------------") for i in a: if i==1: a.remove(i) print(i,id(i)) print("------------------") print(a)
>>>
在列表中遍历,当元素值为1时删除此元素,然后打印,我们得到的输出结果是打印1和3,这和上面那个道理是一样的,删除1后,2会取代1的位置,3取代2的位置,所以就第二次遍历就输出3了,
python中一切皆对象,i是一个临时变量,删除了元素1后还可以输出i的值及地址,数组元素的移除和i没有关系。
列表有三种删除元素方式,del,remove,pop,其中del是python的一个方法不是列表所特有,pop()参数为元素的索引,remove()参数是想要删除的值
用一下del看看会出现什么结果:
a=[1,2,3] for i in a: if i==2: del i print(id(i))
#报错 NameError: name 'i' is not defined
a=[1,2,3] for i in a: if i==2: del i #del是解除引用,python中一切皆引用 try: print(id(i)) except NameError: pass
a删除前地址1927704032 1927704064 1927704096
删除后输出 1927704032
1927704096
对比地址的变化,可以得知del删除了该元素内存地址引用,所以报了错,与remove对比。
删除列表中的空元素有这两种方法:
#第一种 test2 = ['a','','b','','c','',''] while '' in test2: test2.remove('') print(test2) >>>['a', 'b', 'c'] #第二种 test2_new = [i for i in test2 if i != ''] #生成一个新的列表
即删除列表中指定元素建议使用上述两种方法,不要用for循环。
上面记录是写代码时踩的坑,有不严谨或者错误的地方期望大家指正。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:python导包语句执行
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash