【问题标题】:Strange Behavior in Python's Remove Function [duplicate]Python的删除函数中的奇怪行为[重复]
【发布时间】:2014-03-08 08:16:13
【问题描述】:

谁能向我解释一下为什么这个 Python 脚本会产生这个输出?

>>> a = range(0,50)  
>>> for x in a:  
...     a.remove(x)  
...   
>>> a  
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]

这对我来说似乎很奇怪,因为脚本只会删除每隔一个条目。我认为循环会迭代地删除列表中的所有项目。

【问题讨论】:

    标签: python loops behavior


    【解决方案1】:

    什么

    for x in a:
    

    真正做到的是它使用了一个内部计数器,所以它会返回 a[0], a[1], a[2]...

    您的代码发生的情况是,删除项目会更改循环索引应指向的位置,因此:

    第一个循环,index == 0,你删除了 a[0],它是 0。第二个循环,索引是 1,但现在,a 是 [1..49],a[1] 是 2。

    等等。

    【讨论】:

      【解决方案2】:
      >>> a = range(0,50)  
      >>> for x in a[:]:
      ...     a.remove(x)  
      ...   
      >>> a  
      []
      

      复制列表 (a[:]),这样您就不会在迭代时对其进行修改。

      【讨论】:

        猜你喜欢
        • 2016-07-15
        • 1970-01-01
        • 2017-01-14
        • 2021-02-21
        • 1970-01-01
        • 2015-10-24
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多