zoukankan      html  css  js  c++  java
  • 正确的在循环list的时候删除list里面的元素

    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)
  • 相关阅读:
    记intouch SMC local下驱动丢失问题解决
    随机变量的频数分布图
    Clonal hematopoiesis of indeterminate potential(意义不明的克隆性造血)-CHIP
    聚类热图
    linux把软件安装到指定目录
    Phred-scale quality scores的相关内容
    GATK的硬过滤
    VCF和GVCF格式说明
    非root权限 安装更新gcc
    在非小细胞肺癌中,MET基因的14号外显子突变和年龄,依赖于癌症阶段的CNV,C-MET过表达的关系
  • 原文地址:https://www.cnblogs.com/randomlee/p/9051171.html
Copyright © 2011-2022 走看看