1. 程式人生 > >python-內建高階函式

python-內建高階函式

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代表排序的關鍵字