今天遇到个问题,for循环+remove发现程序只会执行一次就中断执行了,直接上代码如下
x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
for i in x:
if i in y:
x.remove(i)
print x
诉求很简单,匹配到就删掉,但实际输出是什么呢,看下图
为啥c没有被remove掉,只有b被remove掉了?原来问题就在x上,程序运行初期加载的list值和运行一次remove后的值不同,程序这是选择“罢工”并且采用“和平”的解决方式-中断运行并输出作为处理手段,这样我们才看到了['a', 'c', 'd']
那, 怎么才能达到我们的remove意愿呢,仔细看下面code跟之前的有什么不同
x = ['a', 'b', 'c', 'd']
y = ['b', 'c']
for i in x[:]:
if i in y:
x.remove(i)
print x
对了,就是一个 [:] 搞定了, [:]的用法请自行度娘,谷歌,或者采用list中转,或者pop来达到目的,不一一赘述