第7條 用列表推導式來取代map和filter

2022-03-14 01:44:31 字數 1478 閱讀 6307

核心知識點:

1.列表推導式要比內建的map和filter函式清晰,因為它無需額外編寫lambda表示式。

2.列表推導式可以跳過輸入列表中的某些元素,如果改用map來做,那就必須輔以filter方能實現。

3.字典與集也支援推導表示式。

python提供了一套精煉的寫法,可以根據乙份列表裡製作另外乙份。這種表示式成為列表推倒式。

例如,要用列表中每個元素的平方值來建立另乙份列表,可以這樣實現:

>>> a =

[1,2,3,4,5,6,7,8

]>>> squares =

[x**2 for x in a

]>>>

print

(squares)

[1, 4, 9, 16, 25, 36, 49, 64

]

除非是呼叫只有乙個引數的函式,否則,對於簡單的情況來說,列表推導要比內建的map函式更清晰。

如果使用map就要建立lambda函式,以便計算新列表中各個元素的值,這會使**看上去比較亂。

>>> squares = map(lambda x:x**

2,a)

>>>

print

(squares)

>

>>>

list(squares)

[1, 4, 9, 16, 25, 36, 49, 64

]

列表推導式不像map那麼複雜,可以直接過濾原列表中的元素,使得生成的新列表不會包含對應的計算結果。

例如,在計算平方值時,我們只想計算那些為2所整除的數。如果採用列表推導式,只需要在迴圈的後面新增條件表示式即可:

>>> even_squares =

[x**2 for x in a if x%2 == 0

]>>>

print

(even_squares)

[4, 16, 36, 64

]

把內建的filter函式與map結合起來,也能達成同樣的效果,但**會非常難懂。

>>> alt = map(lambda x:x**

2,filter(lambda x:x%2==

0,a))

>>>

print

(alt)

>

>>>

list(alt)

[4, 16, 36, 64

]

字典(dict)與集(set)也有和列表類似的推到機制。例如:

>>> chile_ranks = 

>>> rank_dict =

>>> chile_len_set =

>>>

print

(rank_dict)

>>>

print

(chile_len_set)

第7條 用列表推導來代替map和filter

python提供了一種精簡的方法,可以根據乙份列表來生成另外乙份列表,即為列表推導。例項1 生成每個元素的平方 a 1 2,3 4,5 6,7 squares x 2for x in a print squares a 1 2,3 4,5 6,7 squares map lambda x x 2,a...

列表推導式

1.先判斷再賦值 a 5 b 6 c a b print c false 列表組合 list1 1,2,3 list2 4,5,6 list3 list1 list2 print list3 一行 方括號中是對字串的切片 後邊有個or 為從左到右,取第乙個為真的值,如果or左側為非空字串,就是用or...

列表推導式

0 9的平方,輸出為列表 list1 x 2 for x in range 10 range 10 是0 9 print list1 結果為 0,1,4,9,16,25,36,49,64,81 使用for迴圈完成 0 9的平方,輸出為列表 list1 for i in range 10 print ...