python-內建高階函式
阿新 • • 發佈:2018-12-21
1.map
map()函式接收兩個引數,一個是函式,一個是序列
map將傳入的函式依次作用到序列的每個元素,並且把結果
作為新的序列返回
#求絕對值:
print((map(abs,[-1,3,-4,-5])))
輸出:
<map object at 0x7f2aef1e5208>、
map列印的不是一個列表而是一個物件,所以我們需要轉換為列表才能列印。
print(list(map(abs,[-1,3,-4,-5])))
輸出:
[1, 3, 4, 5]
# 需求:使用者接收一串數字;講該字串中的所有數字轉化為整型 # 並以列表格式輸出 num = input('') def isint(num): return int(float(num)) print(list(map(isint,num.split(' '))))
# 對於序列的每個元素求階乘
def factoria(x):
"""對與x求階乘"""
res = 1
for i in range(1,x+1):
res = res * i
return res
li = [random.randint(2,7) for i in range(10)]
print(list(map(factoria,li)))
輸出:
[24, 5040, 2, 2, 24, 120, 2, 24, 720, 5040]
2.reduce
reduce:把一個函式作用在一個序列上,這個函式必須接收兩個引數
reduce把結果繼續和序列的下一個元素做累積計算
reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)
例1:3的階乘
from functools import reduce
"""
python2:reduce為內建函式
python3:from functools import reduce,這裡我用的python3
"""
def multi(x,y):
return x*y
print(reduce(multi,range(1,4)))
輸出:
6
例2:求1-5的和
def add(x,y):
return x+y
print(reduce(add,[1,2,3,4,5]))
輸出:
15
3.filter 過濾函式
和map()類似,filter()也接收一個函式和一個序列
但是和map()不同的是,filter()把傳入的函式依次作用於每個元素,
然後根據返回值是True還是False決定保留還是丟棄該元素.
例1:100以內的偶數
#只能一個形參,函式的返回值只能是True或者False
def isodd(num):
if num %2==0:
return True
else:
return False
print(list(filter(isodd,range(100))))
4.sorted
.sort()與sorted()的區別:
li = [1,2,4,6,3]
li.sort() # sort在原有列表中排序
print(li)
a = sorted(li) # sorted是給新生成變數排序
print(a)
#預設sort和sorted方法由小到大進行排序,reverse=True 由大到小進行排序
a = sorted(li,reverse=True)
print(a)
這裡sorted()是一個高階函式,我們來了解一下他的用法:
info = [
# 商品名稱 商品數量 商品價格
['apple1', 200, 32],
['apple4', 40, 12],
['apple3', 40, 2],
['apple2', 1000, 23]
]
#預設按照商品數量進行排序
print(sorted(info))
輸出:
[['apple1', 200, 32], ['apple2', 1000, 23], ['apple3', 40, 2], ['apple4', 40, 12]]
怎麼樣按照商品數量和商品價格排序呢?
1.商品數量
info = [
# 商品名稱 商品數量 商品價格
['apple1', 200, 32],
['apple4', 40, 12],
['apple3', 40, 2],
['apple2', 1000, 23]
]
def sorted_by_count(x):
return x[1]
print(sorted(info,key=sorted_by_count)) # key代表排序的關鍵字
輸出:
[['apple4', 40, 12], ['apple3', 40, 2], ['apple1', 200, 32], ['apple2', 1000, 23]]
2.商品價格
info = [
# 商品名稱 商品數量 商品價格
['apple1', 200, 32],
['apple4', 40, 12],
['apple3', 40, 2],
['apple2', 1000, 23]
]
# 按照商品價格進行排序
def sorted_by_price(x):
return x[2]
print(sorted(info,key=sorted_by_price)) # key代表排序的關鍵字
輸出:
[['apple3', 40, 2], ['apple4', 40, 12], ['apple2', 1000, 23], ['apple1', 200, 32]]
如果商品數量一致時候怎麼辦?如果商品數量一致,則按照商品價格由小到大進行排序。
#先按照商品數量由小到大進行排序,如果商品數量一致,
#則按照商品價格由小到大進行排序
def sorted_by_count_price(x):
return x[1], x[2]
print(sorted(info, key=sorted_by_count_price)) # key代表排序的關鍵字