核心知識點:
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
]>>>
(squares)
[1, 4, 9, 16, 25, 36, 49, 64
]
除非是呼叫只有乙個引數的函式,否則,對於簡單的情況來說,列表推導要比內建的map函式更清晰。
如果使用map就要建立lambda函式,以便計算新列表中各個元素的值,這會使**看上去比較亂。
>>> squares = map(lambda x:x**2,a)
>>>
(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
]>>>
(even_squares)
[4, 16, 36, 64
]
把內建的filter函式與map結合起來,也能達成同樣的效果,但**會非常難懂。
>>> alt = map(lambda x:x**2,filter(lambda x:x%2==
0,a))
>>>
(alt)
>
>>>
list(alt)
[4, 16, 36, 64
]
字典(dict)與集(set)也有和列表類似的推到機制。例如:
>>> chile_ranks =>>> rank_dict =
>>> chile_len_set =
>>>
(rank_dict)
>>>
(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 ...