首頁  >  文章  >  後端開發  >  python 列表解析

python 列表解析

巴扎黑
巴扎黑原創
2017-06-27 09:09:411931瀏覽

列表解析,主要用於動態建立列表

本篇主要說一下,lambda、map()、和filter()同列表解析語句之間結合的用法

列表解析的基本語法為:[expr for iter_var in iterable]

這個語句的核心是for循環,他迭代iterable物件的所有條目。前面的expr會套用於序列的每個成員,最後的結果值是表達式產生的列表。

 

1. 基礎使用

來一段範例吧

在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]

這就是完全按照基本語法寫的一個列表解析

 

2. 再循環語句後面加入判斷條件

擴充版本語法:[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




2

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn