Python中For each 与Remove使用中误区

有一段Python代码如下:

alist=['a','b','c','d']

print 'alist=' ,alist

for each in alist:

    print each 

    alist.remove(each)

其输出为什么?肯定不少人会说结果为空,因为alist数组中的元素在for each 结合remove这段都被移出了。

但真正运行的结果为:​

Python中For each 与Remove使用中误区_第1张图片  

挺出乎意料的哈。

什么原因,我们在for each 里加上 print 'alist = ' ,alist ​来看一下。

for each in alist:

    print each 

    alist.remove(each)

    print 'alist = ' ,alist

输出结果:

Python中For each 与Remove使用中误区_第2张图片

为什么会这样?

在for each 里, each 代表数组里的位数,第一次执行为数组[0]位,​a , 所以后面的remove 就是把a 移出了,移出后, alist数组变成['b','c','d'] , 这个在第一步执行完后没有什么异议。

关键在于第二次执行,第二次执行为alist数组的[1]位,在alist变成[‘b','c','d']的情况下,alist[1]为 c , 所以此时each 为c, 再执行remove 就把alist数组中 c元素移出了,alist数组变为['b','d'],此时数组只有两个了,alist[0]-'b', alist[1]-'d', 而此时each 值已变为2了,因为alist[2]已不纯在,所以程序运行结束。

由此,我们需要铭记,如果想要实现将数组里的元素全部移出,那么一定要慎用for each 。

你可能感兴趣的:(实战)