您的位置:首页 > 其它

关于在list的值在循环中remove时出现的错误的总结

2017-12-11 21:50 281 查看
# 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐