标签:pre 方式 循环 span blog 结果 .net list sed
出现这个情况是因为,pop一次后list长度发生变化,第二次pop的是新的list了,
可以按从小到大的顺序删除,每删除一个,后面要删除的index都减去1: 第一次pop(1), 第二次pop(3-1)....
这里直接给出通用解决方案:1、倒序循环遍历;2、遍历拷贝的list,操作原始的list。
倒序循环遍历三种方法:http://blog.csdn.net/iflysoft/article/details/9013315
实现1:
source = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘] # 要删除这个list中index为2,4,6的元素,结果应该为a b d f h del_list = [4,6,2] # 将被删除的index编号,假设是无序的 for index in range(len(source)-1,-1,-1): # 循环顺序7 6 5 4 3 2 1 0 for del_index in del_list: if index == del_index: source.pop(index) # 这样倒序遍历每次都删除了del_list里面index最大的,即source中最靠近尾部的元素 # 可以看出,实际上是这样的删除步骤, pop(6) pop(4) pop(2)也可以这样: del_list.sort(reverse=True) # del_list降序排列 for i in del_list: source.pop(i) print(source) # 以上两种方法任选一种
实现2:
只是倒序遍历方式不一样,用的是列表切片的方式,(字符串也可以切片)
source = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘] for i in source[::-1]: # list切片,这是创建了一个新list,可能占用内存 print(i) # h g f e d c b a for i in reversed(source): # 反转list,也创建了一个新list print(i) # h g f e d c b a
标签:pre 方式 循环 span blog 结果 .net list sed
原文地址:http://www.cnblogs.com/revo/p/7296684.html