Mutation and Iteration
- avoid mutating a list as you are iterating over it
代码:
def remove_dups(L1,L2):
for e in L1:
if e in L2:
L1.remove(e)
L1=[1,2,4,5]
L2=[2,3,1,6]
remove_dups(L1,L2)
L1
》[2, 4, 5]
L2
》[2, 3, 1, 6]
L1 is [2,4,5], not [4,5] why?
Python uses an internal counter to keep track of index it is in the loop
mutating changes the list length but Python doesn't update the counter
loop never sees element 2
所以上述代码是有问题的,可改为:
def remove_dups_new(L1,L2):
L1_copy = L1[:]
for e in L1_copy:
if e in L2:
L1.remove(e)