Python倒序遍歷
阿新 • • 發佈:2017-08-07
新的 .so lis 反轉 details -1 sed http 三種
出現這個情況是因為,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 hdel_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 fori in reversed(source): # 反轉list,也創建了一個新list print(i) # h g f e d c b a
Python倒序遍歷