【问题标题】:Python list elements removal logical error? [duplicate]Python列表元素删除逻辑错误? [复制]
【发布时间】:2011-12-15 04:50:29
【问题描述】:

可能重复:
Removing from a list while iterating over it

我有这个代码:

s = [2,3,4,5]

for i in s:
  s.remove(i)

print(s) 

当我运行它时,结果是:

[3,5]

这里的逻辑错误是什么?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您在修改列表时正在迭代列表,这导致了您的问题。

    制作一个临时列表 (list(s)),您可以对其进行迭代并根据需要修改原始列表:

    >>> s = [2,3,4,5]
    >>>
    >>> for i in list(s):
    ...   s.remove(i)
    ... 
    >>> print(s)
    []
    

    【讨论】:

      【解决方案2】:

      逻辑错误是在迭代同一列表时从列表中删除元素。

      当然,Python 隐藏了一些实现细节。在内部,您删除第一项,留下[3,4,5]。然后删除第二项,留下[3,5]。至此,您已经从一个只有两个项目长的列表中删除了两个项目,因此您完成了。

      【讨论】:

        【解决方案3】:

        这是因为迭代器。考虑这个代码段:

        s = [2,3,4,5]
        
        for i in s:
            print "i",i
            j = s
            print "j", j
            s.remove(i)
            print "removed"
            print "j", j
            print "s", s
        
        print s
        

        输出将是

        i 2
        j [2, 3, 4, 5]
        removed
        j [3, 4, 5]
        s [3, 4, 5]
        i 4
        j [3, 4, 5]
        removed
        j [3, 5]
        s [3, 5]
        [3, 5]
        

        基本上,当你执行for循环时,内部迭代器会先到s[0],然后是s[1],等等。当下一轮循环执行时,s[1]已经是4而不是3因为 s 本身已经被修改了。

        【讨论】:

          猜你喜欢
          • 2022-11-02
          • 2017-06-25
          • 1970-01-01
          • 2011-09-28
          • 1970-01-01
          • 1970-01-01
          • 2018-06-22
          • 2021-05-25
          • 1970-01-01
          相关资源
          最近更新 更多