正确的在循环list的时候删除list里面的元素
2024-09-30 20:31:01
s = [1,2,3,4,5] for i in s:
s.remove(i)
print(s)
输出结果:[2, 4]
1、当第一次删除后,后面的元素会前移,此时s=[2,3,4,5],
2、然后指针下一次会指向新列表的第二个元素(即初始状态的第三个位置),从而初始状态的第二个位置被跳过了,初始第三个位置被删除,接着后面的元素又再次前移(变成[2,4,5])
3、指针指向新列表的第三个元素,即初始状态的第5个元素5,然后5被删除了,因此只剩下[2,4]
那么如何解决这个问题呢?
这里还得讲一下浅拷贝和深拷贝。
浅拷贝是什么呢?浅拷贝是在复制的时候只增加了一个指针,没有给其分配了内存空间,即你原来有一个a列表,你这个a里的值都有指向自己的指针,而且也有自己的内存空间a1,当浅拷贝a列表的时候得到一个A,这个A里的值都有指向自己的指针,但是他的的内存空间还是a1;这个时候你对无论是a还是A进行操作,都会改变内存空间a1里的值。
深拷贝是什么呢?深拷贝是在复制的时候不但增加了一个指针,而且还给其分配了内存空间,即你原来有一个a列表,你这个a里的值都有指向自己的指针,而且也有自己的内存空间a1,当深拷贝a列表的时候得到一个A,这个A里的值都有指向自己的指针,而且也有自己的内存空间A1;那么你再对原来的进行操作的时候可以去a里去寻找,在A里进行操作,由于都有自己的独立的内存空间,那么不会相互影响。就可以避免遗漏值,出现错误。直接贴代码:
import copy
s = [1,2,3,4,5]
s_new=copy.deepcopy(s)
for i in s_new:
s.remove(i)
print(s)
最新文章
- win系统盘下面安装RedHat Linux6.2ES
- XPath学习:轴(3)——descendant
- SQL Server Analysis Services 数据挖掘
- Android布局中的空格以及占一个汉字宽度的空格的实现
- 第七篇、Nginx Install On Mac
- UITableView 小节-备
- android 按字母搜索
- 微信小程序icon,text,progress标签的测试
- 1.Android中解析json程序代码
- 深度辨析 Python 的 eval() 与 exec()
- Java设计模式学习记录-备忘录模式
- Object类(根类)
- Django之名称空间
- 核心编程9 文件和文件的输入输出 (os模块)
- requirejs模块路径配置问题
- iOS开发中的小技巧 - 多张图合成一张
- Java高频面试题
- C# Hadoop学习笔记(二)—架构原理
- 洛咕 P3702 [SDOI2017]序列计数
- java虚拟机规范(se8)——java虚拟机结构(三)
热门文章
- hdoj--2187--悼念512汶川大地震遇难同胞——老人是真饿了(贪心)
- pycharm打开多个项目并存
- JSP-Runoob:JSP 教程
- Linux学习笔记之Linux shell脚本运行出现问题:bash: ./test: bin/sh: bad interpreter: No such file or directory
- [转]C语言常见错误总结1
- 折半枚举(双向搜索)poj27854 Values whose Sum is 0
- Linux环境下安装JDK并配置环境变量
- DHTML_____window对象的事件
- 使用Oracle的DBMS_SQL包执行动态SQL语句
- jQuery实现文字横向滚动效果