• Python列表的remove方法的注意事项



    为何没有删除列表中的全部元素?

    解释:

    按照执行顺序,第一个空格被删除之后,后面的元素会前移(变成['空格','空格','12','23']),指针下一次会指向新列表的第二个元素(即初始状态的第三个空格),从而初始状态的第二个空格被跳过了,初始第三个空格被删除,接着后面的元素又再次前移(变成['空格','12','23']),指针指向新列表的第三个元素,即初始状态的第5个元素23,然后23被删除了,因此只剩下['空格','12']

    如果想排除初始列表中的部分元素,如何实现?

    由上面的情况知道,在遍历列表的同时对列表执行删除操作,会造成意外的结果,那么对初始列表进行遍历,对初始的列表的副本执行删除操作呢?


    以上结果显示,没有得到预期效果。为什么?

    问题出在copy=ls这一句,这里仅仅是使得copy与ls指向了同一片内存(即浅拷贝,shallow copy),并没有执行【开辟一片新内存,并且ls内存中的内容复制到新内存,然后使copy指向新开辟的内存,即深拷贝,deep copy】这一系列操作。因此对copy执行的remove操作,和对遍历ls列表,实质上还是都是针对同一片内存进行操作,因此结果上一个例子类似。

    若想解决这一问题,有3个办法法:

    (1)

    ls=[' ',' ',' ','12','23','abc','aa']
    copy=[' ',' ',' ','12','23','abc','aa']

    这一办法对于已知列表的所有元素,且元素数量较少,结构较简单时可行,其他情况下不可行。

    (2)引入copy模块的deepcopy方法:

    Python列表的remove方法的注意事项
    (3)另外准备一个空列表,遍历初始列表时,将符合条件的元素逐一加入到空列表当中(利用列表的append方法)。

    这种方法,思路上与remove方法相反,但执行的操作差不多,时间复杂度也与remove方法差不多,无需引入copy模块。

    另外,对于列表的remove方法,python基础教程第二版给出的说明是:

    remove方法用于移除列表中某个值的第一个匹配项:

    >>>x=['to','be','or','not','to','be']

    >>>x.remove('be')

    >>>x

    ['to','or','not','to','be']

  • 相关阅读:
    system.exit(int status)中status值不同时的区别
    Java期末复习——主观题
    JfreeChart 乱码问题处理
    数据结构期末复习——还原二叉树(根据中序和后序遍历输出先序遍历)
    数据结构期末复习——还原二叉树(根据先序和中序遍历输出先序遍历)
    数据结构期末复习——树与二叉树一些知识点
    JavaScript数据结构与算法-队列练习
    JavaScript数据结构与算法-栈练习
    JavaScript数据结构与算法-列表练习
    JavaScript数据结构与算法-数组练习
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5152343.html
Copyright © 2020-2023  润新知