Python新手常見問題五:在遍歷列表的同時又修改該列表
在遍歷列表的同時又在修改這個列表
下面這個例子中的程式碼應該比較明顯了:
>>> odd = lambda x : bool(x % 2) >>> numbers = [n for n in range(10)] >>> for i in range(len(numbers)): ... if odd(numbers[i]): ... del numbers[i] # 這不對的:在遍歷列表時刪掉列表的元素。 ... Traceback (most recent call last): File "<stdin>", line 2, in <module> IndexError: list index out of range
遍歷一個列表或者陣列的同時又刪除裡面的元素,對任何有經驗的軟體開發人員來說這是個很明顯的錯誤。但是像上面的例子那樣明顯的錯誤,即使有經驗的程式設計師也可能不經意間在更加複雜的程式中不小心犯錯。
相關推薦:《》
所幸,Python整合了一些優雅的程式設計正規化,如果使用得當,可以寫出相當簡化和精簡的程式碼。一個附加的好處是更簡單的程式碼更不容易遇到這種“不小心在遍歷列表時刪掉列表元素”的bug。例如列表推導式(list comprehensions)就提供了這樣的正規化。再者,列表推導式在避免這樣的問題上特別有用,接下來這個對上面的程式碼的重新實現就相當完美:
>>> odd = lambda x : bool(x % 2) >>> numbers = [n for n in range(10)] >>> numbers[:] = [n for n in numbers if not odd(n)] # 啊,這多優美 >>> numbers [0, 2, 4, 6, 8]
相關推薦:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2837414/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python基礎-列表操作(2):列表的遍歷和數字列表Python
- 4.1 Python -- 遍歷整個列表Python
- list列表運算子,列表元素的遍歷,列表的方法,生成列表,巢狀的列表|python自學筆記(四)巢狀Python筆記
- python 元組,列表 迴圈遍歷Python
- Python列表最常見的問題【總結】Python
- Python - list 列表常見方法Python
- 【編測編學】零基礎學python_09_列表(操作列表之遍歷列表)Python
- 版本控制常見問題列表——版本控制心得(三) (轉)
- 《新手面試時的常見問題和對策》面試
- 常見物件-字串的遍歷物件字串
- Python中列表遍歷使用range和enumerate的區別Python
- Python學習中最常見的10個列表操作問題Python
- python對常見資料型別的遍歷Python資料型別
- eslint常見規則列表EsLint
- 新手入門 Golang 常見問題Golang
- 遍歷List 同時 remove 元素REM
- golang遍歷channel時return問題Golang
- Python新手常見問題八:標準庫模組命名Python
- rocketmq常見問題及使用 新手篇MQ
- 『無為則無心』Python序列 — 19、Python列表的其他操作(切片和遍歷)Python
- 對列表的修改
- python元組、列表的異同總結Python
- Python面試常見問題Python面試
- 新手常見的Python執行時的17個錯誤Python
- 學習WebFlux時常見的問題WebUX
- 關於 Python 列表操作,最常見問答Top10Python
- 初學python的常見問題Python
- 程式設計實現遍歷ACL訪問控制列表檢查程式訪問許可權程式設計訪問許可權
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- 三種騷操作繞過迭代器遍歷時的資料修改異常
- 遊戲開發者談遊戲行業融資時常見的五個問題遊戲開發行業
- **PHP二維陣列遍歷時同時賦值PHP陣列賦值
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- python的列表[]Python
- List,Map在遍歷的時候removeREM
- 前端開發常見問題精選(五)前端
- 微信小程式開發常見問題(五)微信小程式
- 五個常見 PHP 資料庫問題PHP資料庫