python基础–del操作

list中remove和del的区别

#remove删除首个符合条件的元素,并不删除特定的索引
l1 = [1,1,1,2,3,4,5,5]
l1.remove(2)
print(l1)  #[1, 1, 1, 3, 4, 5, 5]#del按照索引删除字符
l2 = [1,1,1,2,3,4,5,5]
del l2[2]
print(l2)  #[1, 1, 2, 3, 4, 5, 5]

del用法

#del 除可以删除单个元素,还可以删除指定范围内的值和整个对象
l = [1,1,1,2,3,4,5,5]
del l[2:5]
print(l)  #[1, 1, 4, 5, 5]del l
print(l)  # NameError: name 'l' is not defined

Python中del和垃圾回收

Python语言默认采用的垃圾回收机制是引用计数法,当一个对象的引用计数为0时, Python的垃圾回收机制就会将对象回收。
del语句作用在变量上,而不是数据对象上。也就是说在python中, del语句删除某个对象时, 并不是直接将该对象在内存中删除, 而是将该对象的引用计数-1。下面还是以例子来说,

li = [1,2,3,4,5] #定义列表,列表本身不包含数据1-5,而是包含变量li[0] li[1] li[2] li[3] li[4]
first = li[0]    #这相当于浅拷贝,first指向了li[0]
print(id(li))    #li的地址,例为2376828968620
print(id(li[0])) #其中的li[0]地址为141721836406800
print(id(first)) #first地址141721836406800,说明其与li[0]指向一样del li[0]        #删除li[0],实际是引用计数-1print(id(li))    #li地址不变,仍为2376828968620
print(id(li[0])) #此时li[0]地址为141721836406832,因为最初指向0的引用-1了,而新的li[0]出现了,该值为2
print(id(first)) #first指向1,所以其地址不变print(li)        #[2, 3, 4, 5]
print(first)     #值为1

拓展

最初想详细研究remove和del是因为leetcode上的一道数组问题,leetcode283。使用删除非0元素的思路,remove结果正确,而del结果错误。

class Solution(object):def moveZeroes(self, nums):if not nums: return []for i in range(len(nums)):if nums[i] == 0:nums.remove(nums[i])nums.append(0)return nums

为什么会这样,以nums=[1,0,0,3]为例。如果为remove,其流程为:

  1. i==0,nums[0]为1,不为0,到下一个循环;
  2. i==1,nums[1]为0,为0,remove删除首个符合条件的元素,结果为[1,0,3],添加0后为[1,0,3,0];
  3. i==2,nums[2]为1,不为0,到下一个循环;
  4. i==3,nums[3]为0,为0,remove删除首个符合条件的元素,结果为[1,3,0],添加0后为[1,3,0,0]。
for i in range(len(nums)):if nums[i] == 0:del nums[i]nums.append(0)

如果为del,以nums=[1,0,0,3]为例,其流程为:

  1. i==0,nums[0]为1,不为0,到下一个循环;
  2. i==1,nums[1]为0,为0,del按索引删除,结果为[1,0,3],添加0后为[1,0,3,0];
  3. i==2,nums[2]为1,不为0,到下一个循环;
  4. i==3,nums[3]为0,为0,del按索引删除nums[3],结果为[1,0,3],添加0后为[1,0,3,0]。

不过该题还是建议使用双指针。因为list中remove的时间复杂度为O(n)。

参考

https://www.jb51.net/article/150881.htm
https://blog.csdn.net/windscloud/article/details/79732014
https://www.cnblogs.com/yumengda/p/8875574.html
https://www.jianshu.com/p/a2c98df9cfae

python基础--del操作相关推荐

  1. Python基础-文件操作

    Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...

  2. Python基础--文件操作

    文件操作通常用来存储程序结果,以便下次可以直接使用,不必要重新运行一遍.文件操作最基本的三步:1.打开文件或者新建文件  2. 读或者写  3 关闭文件流保存数据. Python 访问模式如下: 打开 ...

  3. python基础-文件操作(10)

    一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:"好记性不如烂笔头". 不仅人的大脑会遗忘事情,计算机也会如此,比如一个 ...

  4. python 基础文件操作

    实时刷新到硬盘里 f= open('hh','w',encoding='utf8') f.write('gyftyftft') f.write('hghgh\njkkjk') f.flush()#实时 ...

  5. 第三章 Python基础——文件操作函数

    3.1三元运算 三元运算又称三目运算,是对简单条件的简写 if 条件成立:val=1 else:val=2 改成三元运算: val=1 if条件成立 else 2 3.2字符编码转换 编码的种类情况: ...

  6. python读文件每一行、并把这行替换-python基础--文件操作实现全文或单行替换

    python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开. 替换文本中的taste 为 tasting Yesterday whe ...

  7. 4道Python基础文件操作函数 练习题

    一.利用b模式,编写一个cp工具,要求如下: 既可以拷贝文本又可以拷贝视频,图片等文件 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file ...

  8. 学会python的基础操作题_第3章 Python基础-文件操作函数 文件操作 练习题

    一.利用b模式,编写一个cp工具,要求如下: 1. 既可以拷贝文本又可以拷贝视频,图片等文件 2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target ...

  9. python基础-PyYaml操作yaml文件

    yaml语法 格式 yaml2种写法 安装PyYaml python使用yaml yaml语法 格式 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. ...

  10. python基础: 字符串操作

    字符串 定义: 使用引号括起来的一串字符 一对单引号.一对双引号.三对单引号.三对双引号 转义:使用 '\',使原来有特殊含义的字符变成普通字符,也可以在定义字符串的前面加一个'r' 字符串拼接 s1 ...

最新文章

  1. 剑指Offer_编程题_22
  2. 4道Python基础字典练习题
  3. 滑动验证前端代码实现
  4. MySQL入门之访问控制与安全
  5. 无法搜索到电脑模拟热点的可以尝试一下(adhoc补丁)
  6. 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读
  7. gjrand 4.0 发布,C语言的伪随机数生成器
  8. Ubuntu22.04 x64 下运行同花顺Linux版,解决libssl版本错误问题
  9. 怎么给计算机管理设置密码,如何给电脑设置密码
  10. 数字交通灯设计(Multisim仿真+PCB实物)
  11. 计算机学业水平考试反思总结8百,考试反思与总结
  12. VOT测试自己的数据集
  13. 会java 学c_先学Java再学c会简单点吗?
  14. C——识别键盘按下模拟键盘按下
  15. HTTP ERROR 403 No valid crumb was included in the request ~jenkins 太高的版本错误。降低版本
  16. linux 进程的作用,ubuntu9.10这些进程有什么作用?
  17. 一组图片看完“自动驾驶”发展史
  18. 通过率低推广费昂贵 - 中国苹果开发者掘金难
  19. 微信小程序体验(1):携程酒店机票火车票
  20. ViewPager的使用方法

热门文章

  1. 计算机毕业设计(附源码)python学科竞赛赛场安排系统
  2. python 计算开平方数
  3. 常用Word 排版要求
  4. Linux的加密和安全
  5. 付临门商服宝 v1.0.5
  6. linux开发板网口连接测试方法
  7. 第四章第六题(圆上的随机点)(Random points on a circle)
  8. ceph-创建使用rule-ssd规则的存储池
  9. Smartbi的使用
  10. [work] 清华朱军 NIPS 2017对抗样本攻防竞赛总结(附学习资料)