首页 > 代码库 > Python倒序遍历

Python倒序遍历

技术分享

出现这个情况是因为,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

 

Python倒序遍历