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)
这段代码是否有潜在危险?要看.在迭代序列的同时减小序列的大小会产生意外行为.
考虑这个例子
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)