詳解Python遍歷列表時刪除元素的正確作法

這篇文章主要介紹了詳解Python遍歷列表時刪除元素的正確作法,文中經過示例代碼介紹的很是詳細,對你們的學習或者工做具備必定的參考學習價值,須要的朋友們下面隨着小編來一塊兒學習學習吧html

一.問題描述

 這是在工做中遇到的一段代碼,原理大概和下面相似(判斷某一個元素是否符合要求,不符合刪除該元素,最後獲得符合要求的列表):python

   
  1. = [1,2,3,4,5,6,7,8]web

  2. for i in a:微信

  3. if i>5:網絡

  4. passapp

  5. else:less

  6. a.remove(i)編輯器

  7. print(a)函數

運行結果:學習

二.問題分析

由於刪除元素後,整個列表的元素會往前移動,而i倒是在最初就已經肯定了,是不斷增大的,因此並不能獲得想要的結果。

三.解決方法

1.遍歷在新的列表操做,刪除是在原來的列表操做

   
  1. = [1,2,3,4,5,6,7,8]

  2. print(id(a))

  3. print(id(a[:]))

  4. for i in a[:]:

  5. if i>5:

  6. pass

  7. else:

  8. a.remove(i)

  9. print(a)

  10. print('-------------------------')

  11. print(id(a))

運行結果:

2.filter

內建函數filter()官方文檔參考:https://docs.python.org/3/library/functions.html#filter

   
  1. = [1,2,3,4,5,6,7,8]

  2. = filter(lambda x: x>5,a)

  3. print(list(b))

運行結果:

3.列表解析

   
  1. = [1,2,3,4,5,6,7,8]

  2. = [for i in a if i >5]

  3. print(b)

運行結果:

4.倒序刪除

由於列表老是「向前移」,因此能夠倒序遍歷,即便後面的元素被修改了,尚未被遍歷的元素和其座標仍是保持不變的。

   
  1. = [1,2,3,4,5,6,7,8]

  2. print(id(a))

  3. for i in range(len(a)-1,-1,-1):

  4. if a[i] > 5:

  5. pass

  6. else:

  7. a.remove(a[i])

  8. print(id(a))

  9. print('--------------------')

  10. print(a)

運行結果:

到此這篇關於詳解Python遍歷列表時刪除元素的正確作法的文章就介紹到這

  1. 歡迎你們點贊,留言,轉發,轉載,感謝你們的相伴與支持

    萬水千山老是情,點個【在看】行不行

  2. *聲明:本文於網絡整理,版權歸原做者全部,如來源信息有誤或侵犯權益,請聯繫咱們刪除或受權事

本文分享自微信公衆號 - python教程(pythonjc)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索