python基础--del操作
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,其流程为:
- i==0,nums[0]为1,不为0,到下一个循环;
- i==1,nums[1]为0,为0,remove删除首个符合条件的元素,结果为[1,0,3],添加0后为[1,0,3,0];
- i==2,nums[2]为1,不为0,到下一个循环;
- 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]为例,其流程为:
- i==0,nums[0]为1,不为0,到下一个循环;
- i==1,nums[1]为0,为0,del按索引删除,结果为[1,0,3],添加0后为[1,0,3,0];
- i==2,nums[2]为1,不为0,到下一个循环;
- 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操作相关推荐
- Python基础-文件操作
Python基础-文件操作 1.文件的打开和关闭 # 1.打开文件 # 默认r模式 只读 文件不存在,报错 # f = open('a.txt')# w模式 写权限 # 如果文件不存在,就会创建文件 ...
- Python基础--文件操作
文件操作通常用来存储程序结果,以便下次可以直接使用,不必要重新运行一遍.文件操作最基本的三步:1.打开文件或者新建文件 2. 读或者写 3 关闭文件流保存数据. Python 访问模式如下: 打开 ...
- python基础-文件操作(10)
一.什么是文件 等等这些都叫做文件,各种格式的.但不仅仅限制于这些. 二.文件的作用 大家应该听说过一句话:"好记性不如烂笔头". 不仅人的大脑会遗忘事情,计算机也会如此,比如一个 ...
- python 基础文件操作
实时刷新到硬盘里 f= open('hh','w',encoding='utf8') f.write('gyftyftft') f.write('hghgh\njkkjk') f.flush()#实时 ...
- 第三章 Python基础——文件操作函数
3.1三元运算 三元运算又称三目运算,是对简单条件的简写 if 条件成立:val=1 else:val=2 改成三元运算: val=1 if条件成立 else 2 3.2字符编码转换 编码的种类情况: ...
- python读文件每一行、并把这行替换-python基础--文件操作实现全文或单行替换
python修改文件时,使用w模式会将原本的文件清空/覆盖.可以先用读(r)的方式打开,写到内存中,然后再用写(w)的方式打开. 替换文本中的taste 为 tasting Yesterday whe ...
- 4道Python基础文件操作函数 练习题
一.利用b模式,编写一个cp工具,要求如下: 既可以拷贝文本又可以拷贝视频,图片等文件 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target_file ...
- 学会python的基础操作题_第3章 Python基础-文件操作函数 文件操作 练习题
一.利用b模式,编写一个cp工具,要求如下: 1. 既可以拷贝文本又可以拷贝视频,图片等文件 2. 用户一旦参数错误,打印命令的正确使用方法,如usage: cp source_file target ...
- python基础-PyYaml操作yaml文件
yaml语法 格式 yaml2种写法 安装PyYaml python使用yaml yaml语法 格式 它的基本语法规则如下 大小写敏感 使用缩进表示层级关系 缩进时不允许使用Tab键,只允许使用空格. ...
- python基础: 字符串操作
字符串 定义: 使用引号括起来的一串字符 一对单引号.一对双引号.三对单引号.三对双引号 转义:使用 '\',使原来有特殊含义的字符变成普通字符,也可以在定义字符串的前面加一个'r' 字符串拼接 s1 ...
最新文章
- 剑指Offer_编程题_22
- 4道Python基础字典练习题
- 滑动验证前端代码实现
- MySQL入门之访问控制与安全
- 无法搜索到电脑模拟热点的可以尝试一下(adhoc补丁)
- 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读
- gjrand 4.0 发布,C语言的伪随机数生成器
- Ubuntu22.04 x64 下运行同花顺Linux版,解决libssl版本错误问题
- 怎么给计算机管理设置密码,如何给电脑设置密码
- 数字交通灯设计(Multisim仿真+PCB实物)
- 计算机学业水平考试反思总结8百,考试反思与总结
- VOT测试自己的数据集
- 会java 学c_先学Java再学c会简单点吗?
- C——识别键盘按下模拟键盘按下
- HTTP ERROR 403 No valid crumb was included in the request ~jenkins 太高的版本错误。降低版本
- linux 进程的作用,ubuntu9.10这些进程有什么作用?
- 一组图片看完“自动驾驶”发展史
- 通过率低推广费昂贵 - 中国苹果开发者掘金难
- 微信小程序体验(1):携程酒店机票火车票
- ViewPager的使用方法