很久没遇到这个问题,都忘记是什么引起的了,记个笔记。
首先foreach遍历是根据列表下标遍历的,foreach遍历前,会根据列表生成对标数组,如列表[1,2,3,4],生成的下标分别是(0,1,2,3),遍历的过程中删除元素,会导致列表变动,后面的元素前移。
如遍历中要删除列表中的元素“1”,删除元素“1”后,列表依次前移,变为[2,3,4],而下一个下标是1,根据下标访问现在的列表,就访问到了元素“3”,而我们想访问的是元素“2”
解决方法有两种:
1. 从后面删除,这样就不会有下标前移的情况
2. 先foreach遍历一遍,生成一个list1,记录要删除的项
遍历list1,删除字典/列表中的项