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

来源:互联网 发布:高级系统数据库工程师 编辑:程序博客网 时间:2024/06/07 00:08
# coding:utf-8a = [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 = 1a.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 = 1a.remove(1)此时a = [2,3,4,5,1,6,2,7,1,8]b = a[4] -> b = 1a.remove(1)此时 a = [2,3,4,5,6,2,7,1,8]b = a[5] -> b = 2a.remove(2)此时 a = [3,4,5,6,2,7,1,8]b = a[6] -> b = 1a.remove(1)此时 a = [3,4,5,6,2,7,8]列表搜索到最后一个下标了 循环结束'''# 解决办法1a = [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# 结果为空# 解决方法 2a = [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
原创粉丝点击