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)

正确的在循环list的时候删除list里面的元素的更多相关文章

  1. python循环删除list中的元素

    直接上例子: a = [1,2,3,4,5,6] for i in a: a.remove(i) print(a) 返回:[2, 4, 6] 循环a,想删除a的所有元素,但实际确有数据保留了下来,这是 ...

  2. Java循环删除集合多个元素的正确打开方式

    首先说下不正确的打开方式: 第一:使用for循环删除集合的元素,示例代码如下 ArrayList<String> list = new ArrayList<String>(Ar ...

  3. Python的list循环遍历中,删除数据的正确方法

    在遍历list,删除符合条件的数据时,总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_lis ...

  4. 如何正确遍历删除List中的元素(普通for循环、增强for循环、迭代器iterator、removeIf+方法引用)

    遍历删除List中符合条件的元素主要有以下几种方法: 普通for循环 增强for循环 foreach 迭代器iterator removeIf 和 方法引用 其中使用普通for循环容易造成遗漏元素的问 ...

  5. 关于java中ArrayList的快速失败机制的漏洞——使用迭代器循环时删除倒数第二个元素不会报错

    一.问题描述 话不多说,先上代码: public static void main(String[] args) throws InterruptedException { List<Strin ...

  6. 如何正确遍历删除List中的元素,你会吗?

    遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...

  7. Python笔记:用for循环删除列表中的元素

    for运行过程中会有一个指针来记录当前循环的元素是哪一个,一开始这个指针指向第0个元素,然后获取它,接着删除第0个元素,这时候,原来是第1个的元素会变成第0个,当指针向后移动一次,指向了现在第1个元素 ...

  8. 集合赋值及for循环删除符合条件的元素

    一.Java语言中ArrayList对象能直接赋值给另一个ArrayList对象吗? https://zhidao.baidu.com/question/399214655.html ArrayLis ...

  9. 正确遍历删除List中的元素方法(推荐)

    遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...

随机推荐

  1. linux 基础 —— 网络管理

    Linux 最强大的功能是什么?网络功能. 修改 dns 服务器(解析域名到 ip 地址): $ sudo vim /etc/resolvconf/resolv.conf.d/base # 添加如下内 ...

  2. "git rm" 和 "rm" 的区别(转载)

    转自:http://yang3wei.github.io/blog/2013/02/03/git-rm-he-rm-de-qu-bie/ 这是一个比较肤浅的问题,但对于 git 初学者来说,还是有必要 ...

  3. MQTT + apache-apollo服务器初学使用

    说明:MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通 ...

  4. JAVA的双色球 小程序

    还是挺简单的,功能过于强大. import java.util.Arrays; import java.util.Random; import java.util.Scanner; public cl ...

  5. Android 性能优化(13)网络优化( 9)Determining and Monitoring the Docking State and Type

    Determining and Monitoring the Docking State and Type PreviousNext This lesson teaches you to Determ ...

  6. SQL数据库,增加查询修改以及防sql写入攻击

    SQL添加信息 SQL查询信息 SQL修改信息 SQL语句写入攻击: 普通语句添加信息 sql写入语句攻击: 解决方法:分开传送语句与参数关键:@

  7. 【工具】前端Photoshop

    前端photoshop最常见问题: 字体单位换成像素:按下ctrl+k调出首选项,选择单位与标尺,在里面把文字单位由点改为像素就行了.不过要注意的是,点是很多软件里面文字的默认单位.像素是虚拟单位,如 ...

  8. Java运行报错问题——Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook

    http://blog.csdn.net/xifeijian/article/details/8830933 上述这个朋友博文提醒,可能是因为其他软件添加了JAVA_HOME的路径造成冲突.但他支持删 ...

  9. 【译】x86程序员手册22-6.4页级保护

    6.4 Page-Level Protection 页级保护 Two kinds of protection are related to pages: 与页相关的保护有两类: Restriction ...

  10. Spring+Spring MVC+Hibernate环境搭配

    Spring+Spring MVC+Hibernate简称"SSH".Spring容器是Spring的核心,该 容器负责管理spring中的java组件.Spring的核心机制:依 ...