您現在的位置是:首頁 > 棋牌

Python遍歷刪除列表中滿足條件的元素時應注意列表是可變的集合

  • 由 方知資料 發表于 棋牌
  • 2022-09-13
簡介這是因為列表是可更改的集合,在第一次遍歷時,列表的第一個元素“a”會被刪除,strings也就變成了[“as”,“bat”,“car”,“dove”,“python”] ,此時遍歷strings的第二個元素是“bat”,“as”被忽略掉了,

礦場突變模式下架了嗎

Python遍歷刪除列表中滿足條件的元素時應注意列表是可變的集合

Python在使用遍歷語句刪除列表中滿足一定條件的元素時應注意列表是可變的集合,刪除某一元素後列表索引的位置會發生改變,導致原本符合過濾條件的元素也未被刪除掉

案例:

strings=[“a”,“as”,“bat”,“car”,“dove”,“python”] 。現需過濾掉長度小於等於2的字串。

一開始我寫的程式碼如下,發現“as”也滿足條件,但是並沒有被刪除。

strings=[“a”,“as”,“bat”,“car”,“dove”,“python”]for i in strings: if len(i)<=2: strings。remove(i)strings

下面是程式碼的執行結果:

Python遍歷刪除列表中滿足條件的元素時應注意列表是可變的集合

可以看到,

“as”這個字串是滿足長度小於或等於2的條件,但是並沒有從strings的列表中刪除。

這是因為

列表是可更改的集合

,在第一次遍歷時,

列表的第一個元素“a”會被刪除,strings也就變成了[“as”,“bat”,“car”,“dove”,“python”] ,此時遍歷strings的第二個元素是“bat”,“as”被忽略掉了,也就不會出現在長度是否小於或等於2的條件判斷中了,最終導致“as”這個元素無法被過濾掉。

驗證:

驗證:

strings=[“a”,“as”,“bat”,“car”,“dove”,“python”]for i,j in enumerate(strings): print(i,j) strings#執行結果:“”“0 a1 as2 bat3 car4 dove5 python”“”

驗證:

strings=[“a”,“as”,“bat”,“car”,“dove”,“python”]for i,j in enumerate(strings): print(i,j) #“a”剔除後,bat的位置由2變成了1,第二次遍歷的是bat if len(j)<=2: strings。remove(j) strings#執行結果:“”“0 a1 bat2 car3 dove4 python”“”

輸入以下程式碼,可以看到每個元素對應的位置

strings=[“a”,“as”,“bat”,“car”,“dove”,“python”]new_strings=[]for i in strings: if len(i)>2: new_strings。append(i)new_strings

以上就是我作為python入門級選手想到的解決方案,如果大家還有更好的方法敬請留言指教!

參考資料:

https://www。jb51。net/article/184893。htm

Python遍歷刪除列表中滿足條件的元素時應注意列表是可變的集合

Top