- Django 2.0 入門與實踐
- 李健
- 522字
- 2020-06-30 17:19:12
4.4 迭代進階
4.4.1 Iterable
上一節介紹了for循環,這種遍歷叫作迭代,在Python中并不是所有對象都可以進行迭代的,例如對一個整數進行迭代就會拋出異常:

輸出結果:

錯誤信息表明整數對象是不可以進行迭代操作的。如何判斷一個對象是否可以進行迭代呢?可以使用collections模塊的Iterable類型來判斷:

輸出:
>>> False >>> True
4.4.2 enumerate
enumerate函數可以將一個序列轉換為索引-元素對,方便在操作序列時使用元素的索引。下面改進for循環,使用enumerate函數在循環中同時迭代索引和元素本身:
for i, value in enumerate(["Aaron", "Tom", "Kate"]): print(i, value)
4.4.3 列表推導式
列表推導式(list comprehension)是利用其他列表創建新列表的一種方式。它的工作方式類似于for循環,例如:
>>> [x*x for x in range(10)] >>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
上面列表推導式中的“for x in range(10)”相當于一個for循環,range()函數用來創建一個新的列表,在每次循環的時候將循環變量x賦值給表達式x*x,x*x相當于for循環的代碼塊,最后根據x*x生成新列表。
我們知道for循環是可以嵌套if條件判斷語句的,在列表推導式中一樣可以,例如,生成一個奇數數組:
>>> [x for x in range(10) if x%2 != 0] >>> [1, 3, 5, 7, 9]
當然列表推導式中的for循環也是可以嵌套的,例如:
>>> [(x, y) for x in range(3) for y in ["Aaron", "Tom", "Jack"]] >>> [(0, 'Aaron'), (0, 'Tom'), (0, 'Jack'), (1, 'Aaron'), (1, 'Tom'), (1, 'Jack'), (2, 'Aaron'), (2, 'Tom'), (2, 'Jack')]
注意
雖然列表推導式非常靈活,但是為了保證代碼的易讀性,建議在列表推導式中不要嵌套過多層次,推薦最多兩層。
推薦閱讀
- 基于粒計算模型的圖像處理
- 企業級Java EE架構設計精深實踐
- Visual FoxPro 程序設計
- Internet of Things with the Arduino Yún
- Python漫游數學王國:高等數學、線性代數、數理統計及運籌學
- 重學Java設計模式
- Learning Salesforce Einstein
- Learning FuelPHP for Effective PHP Development
- Creating Mobile Apps with jQuery Mobile(Second Edition)
- Extreme C
- 自學Python:編程基礎、科學計算及數據分析(第2版)
- Android Development Tools for Eclipse
- 零基礎學編程系列(全5冊)
- Getting Started with the Lazarus IDE
- MonoTouch應用開發實踐指南:使用C#和.NET開發iOS應用