zoukankan      html  css  js  c++  java
  • python-可变迭代对象在for循环中的风险Risk in FOR loop while looping mutable iterable object

    >>> a = [1,2,3,4,5,6]
    >>> for item in a:
    ...     a.remove(item)
    ...     
    >>> a
    [2, 4, 6]
    

       

      看到上面的代码是不是感觉很奇怪?直观来看,我们只是想依次把队列a中的每个元素依次删除,为什么最后的结果确是[2,4,6]?如果你够机智想必应该猜出来是什么原因了。对于每一次for循环,当前一次的a.remove(item)执行完成后,a相对的缩短了;item后面的元素补上了之前删除的位置,导致这次for循环删除的是下下个元素。可见,如果我们的迭代对象是会在循环体中发生变化的话,使用for语句将会带来不可预知的风险。

    >>> a = [1,2,3,4,5,6]
    >>> for item in a:
    ...     print('Index: ', a.index(item), ' Content:', item)
    ...     a.remove(item)
    ...     
    Index:  0  Content: 1
    Index:  1  Content: 3
    Index:  2  Content: 5
    >>> a
    [2, 4, 6]
    
  • 相关阅读:
    Windows-Windows 下使用 Linux 系统(WSL)
    Windows
    多校3 1002 RGCDQ
    三分 Error Curves
    Equation Again 最大化最小值
    Monthly Expense
    Hamburgers 假定解是否可行
    多校2 1002 Buildings
    UVa 10881 Piotr’s Ants
    多校1 Assignment(枚举 二分 rmq) 1002
  • 原文地址:https://www.cnblogs.com/Blaxon/p/4729548.html
Copyright © 2011-2022 走看看