Python:从内部和外部移除项目循环迭代器

Ric*_*son 1 python iterator for-loop list

这段代码是否有潜在危险?它会搞乱内外迭代吗?

for a in listA:
            for b in listB: 
                if [... something...]:
                    ... something else...
                    listA.remove(a)
                    listB.remove(b)
                    break
Run Code Online (Sandbox Code Playgroud)

Abh*_*jit 6

这段代码是否有潜在危险?要看.在迭代序列的同时减小序列的大小会产生意外行为.

考虑这个例子

listA = [1,2,3,4]

>>> for a in listA:
    listA.remove(a)
    print a
Run Code Online (Sandbox Code Playgroud)

因为,在删除项目时,超出它的所有项目都被推向左侧,您要迭代的项目将自动移动到下一个元素

第一次迭代:

    listA = [1,2,3,4]
             ^
             |
_____________|

    listA.remove(a)


    listA = [2,3,4]
             ^
             |
_____________|


    print a
    (outputs) 1
Run Code Online (Sandbox Code Playgroud)

第二次迭代:

    listA = [2,3,4]
               ^
               |
_______________|

    listA.remove(a)

    listA = [2,4]
               ^
               |
_______________|


    print a
    (outputs) 3
Run Code Online (Sandbox Code Playgroud)

第三次迭代:

    listA = [2,4]
                 ^
                 |
_________________|

(Exits the Loop)
Run Code Online (Sandbox Code Playgroud)