上一節我們結束了有關python的方法相關內容 這一節我們先來學習python的列表推導式 之前跟大家說過range方法的使用,在這裡我就不做過多的解釋了,如忘記了,請翻閱之前的介紹 列表推導式,是Python內置的一種極其強大的生成list的表達式 如果要生成一個list [1 , 2 , 3 , ...
上一節我們結束了有關python的方法相關內容
這一節我們先來學習python的列表推導式
之前跟大家說過range方法的使用,在這裡我就不做過多的解釋了,如忘記了,請翻閱之前的介紹
列表推導式,是Python內置的一種極其強大的生成list的表達式
如果要生成一個list [1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] 可以用 range(1 , 9):
In [1]: list(range(1, 9)) Out[1]: [1, 2, 3, 4, 5, 6, 7, 8]
非常簡單操作,相信大家一定都會
但我們要講的並不是這個
所謂的列表推導式,就是指的輕量級的迴圈創建列表:
比如像下麵的兩個式子
In [2]: a = [i for i in range(1,10)] In [3]: a Out[3]: [1, 2, 3, 4, 5, 6, 7, 8, 9] In [4]: b = [10 for i in range(1, 10)] In [5]: b Out[5]: [10, 10, 10, 10, 10, 10, 10, 10, 10]
批量生成了兩個列表,第一個是一個有順序的從1到9的列表,第二個是生成了9個相同的數字10
簡單講一下這個列表推導式是怎麼定義的
首先忽略推導式中的第一個字元,也就是 i 和 10 ,看後面的一段語句,很顯然,是一個迴圈語句,之前講過迴圈語句的,這裡不詳細解釋了
然後再來觀察最前面的字元,也就是列表中的元素,迴圈過的每一個都被作為列表的元素,如果你前面的字元是一個常數的話,那麼就只需要考慮迴圈的次數,而不需要考慮迴圈的值
接下來,我們繼續來加強這個列表推導式的應用
通過判斷語句篩選列表元素
比如下麵這段代碼
In [6]: list_if = [i for i in range(1, 10) if i%2 == 0] In [7]: list_if Out[7]: [2, 4, 6, 8]
我們在裡面加了判斷條件,以獲取給定迴圈範圍內的所有的偶數
也就是說你可以在迴圈語句後面在加判斷語句
這個還不能算是入門,接下來我們繼續來加強列表推導式的應用
多個for迴圈
2個for迴圈
使用兩個for迴圈語句,以獲取二維列表
代碼如下所示
In [8]: muti_for_list = [(i ,j) for i in range(1, 5) for j in range (6, 10)] In [9]: muti_for_list Out[9]: [(1, 6), (1, 7), (1, 8), (1, 9), (2, 6), (2, 7), (2, 8), (2, 9), (3, 6), (3, 7), (3, 8), (3, 9), (4, 6), (4, 7), (4, 8), (4, 9)]
這個列表推導式在一些演算法領域會有涉及,我們通過連續寫兩個for迴圈語句,然後在開始以一個(i, j)作為獲取的對象,在這裡要註意以下,他是按照順序執行的
三個for迴圈
獲取三維數組
In [10]: muti_for_list = [(x, y, z) for x in range(2) for y in range (2) for z in range(2)] In [11]: muti_for_list Out[11]: [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
原理基本和二維數組的生成差不多,所以就不做過多解釋了
在多維數組中使用判斷語句
雖然我們在前面已經講了多維數組的創建,但為了加強這個的複雜度,我們繼續加一些條件
獲取三維數組中每行組中元素都一樣的數組 類似於下麵這樣的
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
下麵我們通過代碼來實現這個功能
In [12]: common_list = [(x, y, z) for x in range(10) for y in range (10) for z in range(10) if x == y and y == z] In [13]: common_list Out[13]: [(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9)]
這個並不難實現,無非就是加個判斷條件
列表推導式,就講到這裡,他還有很多種其他的用法,希望大家,自己去挖掘,去探索
特克斯博客官網 www.susmote.com