# coding:utf-8
a = [1,2,1,3,1,4,1,5,1,6,2,7,1,8]
for b in a :
if b == 1:
a.remove(b)
elif b == 2:
a.remove(b)
elif b ==3:
a.remove(b)
elif b == 4:
a.remove(b)
elif b == 5:
a.remove(b)
elif b == 6:
a.remove(b)
elif b == 7:
a.remove(b)
elif b == 8:
a.remove(b)
print a
'''
关于在列表的值在循环中remove是出现的错误的总结
上面的结果理论上应该是a = []
实际上结果是[3, 4, 5, 6, 2, 7, 8]
原因是:
list.remove(a) 移除列表中第一个与a匹配的值
而for in 是按下标进行迭代的
实际过程是
a = [1,2,1,3,1,4,1,5,1,6,2,7,1,8]
当 b = a[0] 即b = 1
a.remove(1)
此时a = [2,1,3,1,4,1,5,1,6,2,7,1,8]
然后
b = a[1] -> b = 1
a.remove(1)
此时a = [2,3,1,4,1,5,1,6,2,7,1,8]
b = a[2] -> b = 1
a.remove(1)
此时a = [2,3,4,1,5,1,6,2,7,1,8]
b = a[3] -> b = 1
a.remove(1)
此时a = [2,3,4,5,1,6,2,7,1,8]
b = a[4] -> b = 1
a.remove(1)
此时 a = [2,3,4,5,6,2,7,1,8]
b = a[5] -> b = 2
a.remove(2)
此时 a = [3,4,5,6,2,7,1,8]
b = a[6] -> b = 1
a.remove(1)
此时 a = [3,4,5,6,2,7,8]
列表搜索到最后一个下标了 循环结束
'''
# 解决办法1
a = [1,2,1,3,1,4,1,5,1,6,2,7,1,8]
list = []
for b in a :
if b == 1:
a.remove(b)
elif b == 2:
a.remove(b)
elif b ==3:
a.remove(b)
elif b == 4:
a.remove(b)
elif b == 5:
a.remove(b)
elif b == 6:
a.remove(b)
elif b == 7:
a.remove(b)
elif b == 8:
a.remove(b)
else:
list.append(b)
print list
# 结果为空
# 解决方法 2
a = [1,2,1,3,1,4,1,5,1,6,2,7,1,8]
for b in a[:] :
if b == 1:
a.remove(b)
elif b == 2:
a.remove(b)
elif b == 3:
a.remove(b)
elif b == 4:
a.remove(b)
elif b == 5:
a.remove(b)
elif b == 6:
a.remove(b)
elif b == 7:
a.remove(b)
elif b == 8:
a.remove(b)
print a
# 原因是a 与 a[:] 是两个不同的对象 不过它们两个对象储存的内容是一样的
# 例如两个男人一个叫张三 一个叫李四 虽然名字不一样 但他们都是男人 (大致的一个比喻)
# 在 a [:]中遍历的是a[]中每一个值 没有remove()来改变a[:]的内容
参考:http://blog.csdn.net/guan666/article/details/71511948