1. filter
filter函式用於過濾可迭代物件。它的語法是這樣的:
filter(function or None, iterable) --> filter object
複製程式碼
第一個引數是一個函式,第二個引數是一個可迭代物件。filter函式會根據第一個引數返回True還是False來決定第二個引數中每一項元素是否保留,它返回的是一個filter物件。
例子:
filter物件是一個迭代器,它由惰性運算的特性。如果想要得到一個list型別的函式,的藉助list函式
2. map
map函式的語法是:
map(func, *iterables) --> map object
複製程式碼
我理解的它的作用就是,遍歷一個(多個)可迭代物件,然後對這個可迭代物件中的每一個元素都執行傳入的函式,並把結果作為最終返回的map物件中的元素。
例子:
list_1 = [1, 2, 3, 4, 5]
list_2 = [9, 8, 7, 6, 5]
new_list_1 = map(lambda i: i**2, list_1)
new_list_2 = map(lambda x, y: x + y, list_1, list_2)
print(list(new_list_1)) # [1, 4, 9, 16, 25]
print(list(new_list_2)) # [10, 10, 10, 10, 10]
複製程式碼
從例子中可以看出map是可以接受多個可迭代物件的。
3. reduce
reduce 不能直接使用,必須從functools模組中匯入(python3中):
from functools import reduce
help(reduce)
複製程式碼
它的語法是這樣的:
reduce(function, sequence[, initial]) -> value
複製程式碼
它接受三個引數,第一個是一個函式,第二個是一個可迭代物件,第三個是個可選引數,初始值,reduce的作用直接看官方解釋,我有點不知道怎麼說:
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5). If initial is present, it is placed before the items
of the sequence in the calculation, and serves as a default when the
sequence is empty.
複製程式碼
直接看例子:
from functools import reduce
nums = reduce(lambda x, y: x + y, [1,2,3,4,5])
print(nums)
'''
reduce 計算的過程可以理解為下面這樣:
(((1 + 2) + 3) + 4) + 5
'''
nums = reduce(lambda x, y: x - y, [1,2,3,4,5])
print(nums)
'''
reduce 計算的過程可以理解為下面這樣:
(((1 - 2) - 3) - 4) - 5
'''
複製程式碼
如果加上initial引數就是這樣:
from functools import reduce
nums = reduce(lambda x, y: x + y, [1,2,3,4,5], 1)
print(nums)
'''
reduce 計算的過程可以理解為下面這樣:
((((1 + 1) + 2) + 3) + 4) + 5
'''
nums = reduce(lambda x, y: x - y, [1,2,3,4,5], 1)
print(nums)
'''
reduce 計算的過程可以理解為下面這樣:
((((1 -1) - 2) - 3) - 4) - 5
'''
複製程式碼
4. zip
zip函式的語法是這樣的:
zip(iter1 [,iter2 [...]]) --> zip object
複製程式碼
作用直接看例子:
zip_example = zip((1,2,3), (3,2,1))
print(list(zip_example)) # [(1, 3), (2, 2), (3, 1)]
複製程式碼
zip將兩個元組(只要是可迭代物件就可以)合併了,合併對應關係是:
(1, 2, 3)
↓ ↓ ↓
(3, 2, 1)
↓↓
(1, 3), (2, 2), (3, 1)
複製程式碼
注意zip返回的是zip物件,也是一個迭代器,如果想要列表型別,還是得用list函式進行轉換。
使用zip可以輕鬆的將字典的key和value對換:
dict_a = {
'a': 'aaa',
'b': 'bbb',
'c': 'ccc'
}
zip_example = zip(dict_a.values(), dict_a.keys())
print(dict(zip_example)) # {'aaa': 'a', 'bbb': 'b', 'ccc': 'c'}
複製程式碼
還有一個用法就是用*
:
zip_example = list(zip((1,2,3), (3,2,1), (3,2,1)))
print(zip_example) # [(1, 3, 3), (2, 2, 2), (3, 1, 1)]
zip_example_restore = list(zip(*zip_example))
print(zip_example_restore) # [(1, 2, 3), (3, 2, 1), (3, 2, 1)]
複製程式碼
給zip的引數加上*
之後就好像是zip逆過程一樣。