列表解析,主要用於動態建立列表
本篇主要說一下,lambda、map()、和filter()同列表解析語句之間結合的用法
列表解析的基本語法為:[expr for iter_var in iterable]
這個語句的核心是for循環,他迭代iterable物件的所有條目。前面的expr會套用於序列的每個成員,最後的結果值是表達式產生的列表。
來一段範例吧
在idle中進行測試:
>>> [i for i in range(0,8)]
[0,1,2,3,4,5,6,7]
其中i 即為基本語法中的expr也是iter_val;再換一種方式,我們對裡面的值進行一下運算讓所有的成員乘以2
>>> [i*2 for i in range(0,8)]
[0, 2, 4, 6, 8, 10, 12, 14]
這就是完全按照基本語法寫的一個列表解析
擴充版本語法:[expr for iter_val in iterable if cond_expr]
我們還可以進行拓展,在他的後面再加入一些語句,對列表進行篩選;例如我們只要這個數值中可以被2整除的數
>>> [i for i in range(1,8) if i%2 == 0]
[ 2, 4, 6]
這種語句類似於使用filter,所以我們同樣可以採用python內建的filter函數實現,以達到取得相同的值
>> ;> l = filter(lambda x:x%2==0, range(1,8))
>>> for i in l:
i
4
6但是我發現沒有,有些不一樣,因為我並沒有直接列印出清單。為什麼呢?因為filter的回傳值是一個生成器(generator),生成器是無法知道所有的值的,只能用迭代的方式取得下一個值
3. map用來達到跟列表解析相同的結果
>>> map(lambda x: x*2, range(1,8))
[2, 4, 6, 8, 10, 12, 14]
使用它可以獲得[x * 2 for x in range(1,8)]一樣的效果,但是使用後者回比map()更有效率
### ######4. 產生矩陣#######當你需要得到一個3行5列的矩陣的時候,很簡單:#### ##>>> [(x,y) for x in range(0,3) for y in range(0,5)]###[(0, 0), (0, 1), ( 0, 2), (0, 3), (0, 4),######(1, 0), (1, 1), (1, 2), (1, 3), (1, 4),######(2, 0), (2, 1), (2, 2), (2, 3), (2, 4)]###### ###### #大家也可以在PEP 202找到更多的參考列表解析的資料###以上是python 列表解析的詳細內容。更多資訊請關注PHP中文網其他相關文章!