官术网_书友最值得收藏!

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')]

注意

雖然列表推導式非常靈活,但是為了保證代碼的易讀性,建議在列表推導式中不要嵌套過多層次,推薦最多兩層。

主站蜘蛛池模板: 濮阳县| 房产| 永昌县| 兴业县| 翁牛特旗| 思南县| 红桥区| 奇台县| 北宁市| 武宁县| 邹平县| 漳州市| 东台市| 广宗县| 景洪市| 萨迦县| 永宁县| 长春市| 扎赉特旗| 会宁县| 舞阳县| 汾西县| 苏州市| 古丈县| 游戏| 滨海县| 腾冲县| 漯河市| 屯门区| 绍兴市| 铅山县| 岐山县| 图木舒克市| 华阴市| 南康市| 荆门市| 平阳县| 石台县| 新宾| 通化市| 洞口县|