zoukankan      html  css  js  c++  java
  • python中remove函数的坑

    摘要:对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素。
    常见用法: a = [1,2,3,4],a.remove(1),然后a就是[2,3,4];对于a = [1,1,1,2],其结果也是[1,1,2],这是最基本的用法。
    但是对于下面这个:

    a = [1,2,3,4]
    for i in a:
          a.remove(i)
    
    # 结果
    a = [2,4]
    

    或者说

    a = [1,1,1,1,1,2]
    for i in a:
          a.remove(1)
    
    #结果
    a = [1,1,2]
    
    是不是跟想象中的不一样,其主要原因如下(^表示当前迭代器位于列表中的位置):
       a = [ 1 , 2 , 3 , 4]
    假设此时  ^
    默认情况下只想第一个元素,然后执行a.remove(1),然后下标向后移动,列表因为删除了元素,后面的向前移动,如下:
       a = [ 2 , 3 , 4]
       此时       ^
    此时执行a.remove(3),重复上面的移动
       a = [ 2 , 4]
       此时           ^
    因为已经到了列表的边界,故结束遍历,并返回`a = [2,4]`。
    

    解决办法:

    # 一下为解决办法之一
    d = dict(zip(range(len(a)), a))
    [v for k, v in d.items() if v != value]
    

    总结:关于python列表的remove操作涉及了列表下标的移动以及列表中元素的移动,涉及了一些关于数组的知识。其核心问题就是前面所说的。

  • 相关阅读:
    spring cglib final @Transactional
    【转】电商架构
    logback发邮件配置
    @Reference不支持继承
    jmap jstack
    dubbo线程池
    C# 爬虫框架实现 流程_爬虫结构/原理
    C# 爬虫框架实现 流程_各个类开发
    C# 爬虫框架实现 概述
    作用域 作用域链 闭包 思想 JS/C++比较
  • 原文地址:https://www.cnblogs.com/JonnyJiang-zh/p/13799533.html
Copyright © 2011-2022 走看看