关于在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
相关文章推荐
- 关于List.remove在for循环中出现问题的解决方案
- 关于出现( linker command failed with exit code 1)错误总结
- 关于list转json出现无法显示xml(XML解析错误:未组织好)
- 关于android在真机调试中出现错误提示:Uninstalling will remove the application data!
- 关于List.remove在for循环中出现问题的解决方案
- 最近在ArcGIS Engine开发中关于调用gp工具过程出现COM 组件的调用返回了错误 HRESULT E_FAIL 错误的解决方法 和 学习oracle中遇到的一些问题总结
- 关于myeclipse操作中出现的自动提示,以及误报错误问题总结
- C#中出现“集合已修改;可能无法执行枚举操作”错误 foreach list.Remove()
- 关于夏昕的spring mvc框架中出现的错误的总结
- VS2008 关于封装OPENCV相关的DLL出现的错误总结
- 关于调用listFile()在遍历含有乱码文件时出现input is not valid Modified UTF-8错误的解决方法
- 关于PHP一些编译安装出现的错误总结
- 关于List.remove在for循环中出现问题的解决方案
- 关于Godaddy空间存放DotNet网站出现500 - Internal server error 错误的总结
- C#中foreach List循环操作出现“集合已修改;可能无法执行枚举操作”错误
- 关于在Webservice里使用LinqToSQL遇到一对多关系的父子表中子表需要ToList输出泛型而产生循环引用错误的解决办法!(转)
- 【Qt5 for VS】关于出现 Qt platform plugin "windows" 运行错误的解决方案
- 关于DevExpress的XtraTreeList使用方法总结
- 关于windows下caffe配置中出现的C2015错误的解决办法
- list remove泛型问题-----毕业设计遇到的问题综合总结