匿名函數:沒有名字,使用一次即被收回,加括號就能夠運行的函數。python
語法:lambda 參數:返回值數組
使用方式:app
res = lambda x,y:x*y print(res(2,3)) # 打印結果:6
內置函數就是python解釋器給咱們提供的函數。函數
max 返回給定參數的最大值,這個參數能夠是可迭代對象code
語法:max(可迭代對象,key=函數對象)對象
min 返回給定參數的最小值,這個參數能夠是可迭代對象排序
語法:min(可迭代對象,key=函數對象)it
# 需求:求出如下工資最高和工資最低的員工 user_dic = { '趙鐵柱': 3000, '張全蛋': 20000, '伍六七': 1500, '李小花': 8000 } s_max = max(user_dic, key=lambda x: user_dic[x]) """ 1.max內部會遍歷user_dic,將遍歷結果一一傳給lambda的參數x 2.依據lambda的返回值做爲比較條件,獲得最大條件下的那個遍歷值 3.對外返回最大的遍歷值 """ print(f"工資最高的員工是:{s_max}") s_min = min(user_dic, key=lambda x: user_dic[x]) print(f"工資最低的員工是:{s_min}") # 原理跟max 相似
sorted 接收一個key函數(可選)來實現對可迭代對象進行自定義的排序class
語法:sorted(可迭代對象,key=函數對象,reverse=False)import
reverse:排序方向,默認從小到大,reverse=True爲降序
# 一、對列表按照絕對值進行排序 li = [-21, -12, 5, 9, 36] print(sorted(li, key=lambda x: abs(x))) """ sorted()函數按照keys進行排序,並按照對應關係返回list相應的元素: keys使用lambda函數排序結果 => [5, 9, 12, 21, 36] | | | | | 最終結果 => [5, 9, -12, -21, 36] """ # 二、假設咱們用一組tuple表示學生名字和成績: L = [('sean', 75), ('egon', 92), ('Jessie', 66), ('tank', 88)] # 2.1 請用sorted()對上述列表分別按名字排序 print(sorted(L, key = lambda x : x[0])) """ 1.sorted內部會遍歷L,將遍歷結果一一傳給lambda的參數x 2.依據lambda的返回值依次進行排序,獲得排序後的list列表 3.對外返回排序後的列表 """ # 輸出[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)] # 2.2 再按成績從高到低排序 print(sorted(L, key = lambda x : x[1], reverse=True)) # 輸出[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]
map 映射。將可迭代對象中的每個值進行修改,而後映射到一個map 對象中,可將這個map 對象轉換其餘容器類型展現結果。只能轉換一次
語法:map(函數對象,可迭代對象)
# 一、求列表[1,2,3,4,5,6,7,8,9],返回一個n*n 的列表 # 常規解決方案 list1 = [1,2,3,4,5,6,7,8,9] li = [] for i in list1: i = i ** 2 li.append(i) print(li) # 使用map 的解決方案 map_obj = map(lambda x: x * x, li) print(map_obj) # 打印結果爲 map對象 print(list(map_obj)) # 將map 對象轉換成列表展現 print(tuple(map_obj)) # 打印爲空 ???
從以上打印結果能夠發現,map_obj
轉換兩次,再次打印的結果是空。這是咋了,放心,這個結果沒被我吃掉!!!這是由於map對象本質是可迭代對象 。list(map_obj)
或 for num in map_obj
這樣的語句,就是調用了迭代器,執行了__ next __()
,消耗了迭代對象。因此,再次使用map_obj
後,會發現它已經空了。
reduce 合併。每次從可迭代對象中獲取兩個值進行累積計算。其效果就是:
reduce(func,[1,2,3]) 等同於 func(func(1,2),3)
語法:reduce(函數對象,可迭代對象,初始值)
注意:
使用reduce 函數,必須導包 from functools import reduce
在求和時,初始值默認爲0;求乘積時,初始值爲1
from functools import reduce # 求1-100以內的和 res_sum = reduce(lambda x, y: x + y, range(1, 101), 0) print(res) # 求1-9的積 res_pro = reduce(lambda x, y: x * y, range(1, 10)) print(res_pro)
filter 過濾。根據函數中返回值是True
仍是False
決定保留仍是丟棄該元素。若是是True就「過濾出來」,並添加到filter 對象中。
語法:filter(函數對象,可迭代對象)
# 求列表['1A','2A','3C','4C','5A']中,返回不包含A的列表 key_list = ['1A','2A','3C','4C','5A'] filter_obj = filter(lambda key:key.endswith('C'),key_list) print(filter_obj) # 打印filter 對象 ----> print(list(filter_obj)) # 將filter 對象轉換成列表展現 print(tuple(filter_obj)) # 打印出空元組,原理同map 對象
從上述代碼能夠發現,filter 對象
本質上也是一個可迭代對象
一、請利用filter()篩選出200之內的回數。回數是指從左向右讀和從右向左讀都是同樣的數,例如12321,909 二、現有列表 L = ["1","2","3","5","7","8","4","9","6"] 1) 求列表中全部偶數組成的最大整數 2) 求列表中全部奇數組成的最小整數