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
- Python列表最常見的問題【總結】Python
- python 元組,列表 迴圈遍歷Python
- list列表運算子,列表元素的遍歷,列表的方法,生成列表,巢狀的列表|python自學筆記(四)巢狀Python筆記
- Python - list 列表常見方法Python
- 【編測編學】零基礎學python_09_列表(操作列表之遍歷列表)Python
- Python中列表遍歷使用range和enumerate的區別Python
- Python學習中最常見的10個列表操作問題Python
- python對常見資料型別的遍歷Python資料型別
- eslint常見規則列表EsLint
- 『無為則無心』Python序列 — 19、Python列表的其他操作(切片和遍歷)Python
- 常見列表顯示樣式
- 新手入門 Golang 常見問題Golang
- 對列表的修改
- golang遍歷channel時return問題Golang
- Python新手常見問題八:標準庫模組命名Python
- rocketmq常見問題及使用 新手篇MQ
- python 元組與列表的異同點 1125Python
- 初學python的常見問題Python
- 關於 Python 列表操作,最常見問答Top10Python
- React Native在Android當中實踐(五)——常見問題React NativeAndroid
- python的列表[]Python
- Python面試常見問題Python面試
- 新手linux系統常見問題解決方案Linux
- 學習WebFlux時常見的問題WebUX
- Python操作SAP時候遇到的一些常見問題Python
- Python字典的遍歷,包括key遍歷/value遍歷/item遍歷/Python
- 三種騷操作繞過迭代器遍歷時的資料修改異常
- 列表在python有什麼用Python
- python列表Python
- Python學習常見問題分享!Python
- 【編測編學】零基礎學python_11_列表(切片+遍歷切片+複製)Python
- Python函數語言程式設計系列009:惰性列表之常規列表Python函數程式設計
- 陣列常見的遍歷迴圈方法、陣列的迴圈遍歷的效率對比陣列
- 新手必看!使用New File Menu常見問題集錦
- 新手雲伺服器租用常見問題彙總伺服器
- 前端開發常見問題精選(五)前端