成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python語法糖——遍歷列表時刪除元素

kid143 / 1326人閱讀

摘要:原因是用發(fā)起任何形式的遍歷時,它的遍歷順序都是從最初就確定的,而在遍歷中刪除了元素會導致當前索引的變化,這樣一是會導致漏刪元素,二是會導致遍歷超過鏈表的長度。所以遍歷一個時要刪除其中的部分元素就需要其他的解決方案。

Python的for可以遍歷一個List,但是在遍歷的過程中刪除元素常常會得到意想不到的結果甚至程序出現異常,例如:

lst = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]

for item in lst:
    if item == 0:
        lst.remove(item)
print lst

輸出: [1, 1, 2, 8, 3, 2, 5, 0, 2, 6]

這段代碼的本意是想刪除列表中元素為 0 的項,但實際跑起來并不是那個結果。

再看下面這個例子,利用索引來遍歷刪除列表中的元素:

for item in range(len(lst)):
    if lst[item] == 0:
        del lst[item]
print lst

輸出: IndexError: list index out of range

這時候就報錯了,拋出了數組下標越界的異常。原因是用for發(fā)起任何形式的遍歷時,它的遍歷順序都是從最初就確定的,而在遍歷中刪除了元素會導致當前索引的變化,這樣一是會導致漏刪元素,二是會導致遍歷超過鏈表的長度。

所以遍歷一個List時要刪除其中的部分元素就需要其他的解決方案。

方法一:可以使用filter過濾返回新的List

lst = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]

lst = filter(lambda x: x != 0, lst)
print lst

這樣可以安全刪除列表中值為 0 的元素了,filter包括兩個參數,分別是functionlist,filter把傳入的函數依次作用于每個元素,然后根據返回值是True還是False來決定是保留還是丟棄該元素。

方法二:列表解析

lst = [x for x in lst if x != 0]
print lst

方法三:或者遍歷拷貝的List,操作原始的List

for item in lst[:]:
    if item == 0:
        lst.remove(item)
print lst

方法四:while循環(huán)來搞定,每次循環(huán)都先會判斷 0 是否在列表中

while 0 in lst:
    lst.remove(0)
print lst

方法五:倒序循環(huán)遍歷

for item in range(len(lst) - 1, -1, -1):
    if lst[item] == 0:
        del lst[item]
print lst

倒序是最geek的解決辦法,但是倒序的代碼可讀性差,推薦用filter,這樣寫出來的代碼更Pythonic。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/38218.html

相關文章

  • 對比幾段代碼,看看你是 Python 菜鳥還是老鳥

    摘要:最終還是要寫上足夠量的代碼,才會有悟道的那一刻。另外,對于代碼本身,有一套書寫規(guī)范,叫做。 Python 里有個小彩蛋: 在 Python Shell 里輸入 import this showImg(https://segmentfault.com/img/remote/1460000018394156?w=600&h=463); 這段話被稱作 Python 之禪 ( The Zen ...

    dingding199389 評論0 收藏0
  • Python技術點

    摘要:內置函數實現對可迭代對象進行進一步處理。文件文件的打開權限打開文件,文件不存在報異常寫入文件,文件不存在則創(chuàng)建。文件不存在則創(chuàng)建。追加文件,具有讀寫權限。 Python基礎類型: 1.Tuple元組,內容不可改變,但是允許元素內部存在list等類型的元素,并且允許改變列表的值,所謂內容不可變指的是在內存中指向的地址是不變的。 temp=(1,2,[3,4]) temp[-1]....

    Lionad-Morotar 評論0 收藏0
  • 002_第一部分_[字典 / 列表解析 / 字符串操作 / STR與BYTES的區(qū)別 ]

    摘要:一字典定義字典獲取元素這兩個的區(qū)別用在不存在的時候不會拋出設置當不存在的時候返回的內容增加和修改元素修改和增加元素的方法都是這個刪除元素刪除的同時返回刪除的內容如果刪除不存在的會報這個時候就需要給定返回值這樣返回的就是不會報錯誤從字典中隨機 一.字典: 定義字典:d = {}d = dict()d = {a:1, b:2} 1.獲取元素: d[a] d.get(a) >這兩個的區(qū)別,用...

    CastlePeaK 評論0 收藏0
  • 傻瓜式學Python3——列表

    摘要:列表是編程中使用頻率極高的數據結構,由一系列按特定順序排列的元素組成,用表示,逗號分隔元素,類似中的數組。由于列表包含多個元素,所以通常命名為復數形式,如,等。使用切片裁剪獲取子列表使用列表名裁剪獲取對應索引區(qū)間的子列。 前言: 好久不見,突然發(fā)覺好久沒寫博客了,最近迷上了 Python 無法自拔,了解了一下,Python 簡單易學,尤其是接觸過 java 的人,入門 Python 更...

    Andrman 評論0 收藏0
  • Python 語法速覽與實戰(zhàn)清單

    摘要:本文是對于現代開發(fā)語法基礎與工程實踐的總結,更多相關資料參考學習與實踐資料索引本文參考了,等。 showImg(https://segmentfault.com/img/remote/1460000012129659); 本文是對于 現代 Python 開發(fā):語法基礎與工程實踐的總結,更多 Python 相關資料參考 Python 學習與實踐資料索引;本文參考了 Python Cras...

    sumory 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<