1.高階函數
-實參是一個函數名
-函數的返回值是一個函數
print(abs(16))
f = abs
print(f(-10))
#函數自己也能夠賦值給變量 變量能夠指向函數
def fun(x,y,f):
return f(x),f(y)
print(fun(-10,34,abs))python
2.內之高階函數_map數組
map():接收兩個參數,一個是函數 一個是序列
map將傳入的函數依次做用到序列的每一個元素,而且把結果做爲新的序列返回app
#對於一個序列[-1,3,-4,-5]的每個元素求絕對值dom
import randomide
print(list(map(abs,[-1,3,-4,-5])))函數
#對於每一個元素求階乘3d
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)))code
#將一個字符串轉換成整型對象
from functools import reduceblog
def str2int(s):
def char2int(ch):
c = {str(x): x for x in range(10)}
return c[ch]
def fun(n1, n2):
return n1 * 10 + n2
return reduce(fun, map(char2int, s))
num = str2int('12345')
print(type(num), num)
3.內置高階函數_filter
filter過濾函數
和map()相似的,也接收一個函數和一個序列
可是和map()不一樣的是,filter()把傳入的函數依次做用於
每一個元素,而後根據返回值是True或者False決定保留仍是丟棄該元素
def isodd(num):
if num % 2 == 0:
return True
else:
return False
print(list(filter(isodd,range(100))))
4.匿名函數
匿名函數的關鍵字爲 lambda,冒號前面是 形參 冒號後面是返回值 。
lambda函數能實現普通同樣的功能,能傳入參數,也能返回運算結果;不一樣的是lambda函數沒有函數名,一般只有一行的表達式,函數的複雜程度也有限。
from functools import reduce
def add(x,y):
return x+y
print(reduce(add,range(10)))
print(reduce(lambda x,y:x+y,range(10)))
def mypow(x):
return x2
print(list(map(lambda x:x2,range(5))))
def isood(num):
return num%2 ==0
print(list(filter(lambda x:x%2==0,range(100))))
5.sorted( )函數
sorted( )函數是用來對可迭代對象排序的,與列表的list( )函數不一樣,後者是在原位置上進行排序的,排序後原列表的元素順序會發生改變,而前者是將排序後的結構生成到一個新的列表中。
s = ['dfs','Fds','tda','Eds']
print(s)
print(sorted(s))
print(sorted(s,key=str.lower))
print(sorted(s,key=str.upper,reverse=True))
info = [
('apple1',200,32), ('apple2', 40, 12), ('apple3', 1000, 23), ('apple1', 40, 2), ('apple1', 40, 5)
]
#按照商品數量進行排序
def sorted_by_count(x):
return x[1]
#按照商品價格進行排序
def sorted_by_price(x):
return x[2]
#先按照商品數量進行小-大的排序,若是商品數量同樣
#則按照商品價格由小-大進行排序
def sorted_by_count_price(x):
return x[1],x[2]
print(sorted(info,key=sorted_by_count))
print(sorted(info,key=sorted_by_price))
print(sorted(info,key=sorted_by_count_price))
#假設咱們用一組tuple表示學生名字和成績,
L =[('Bob', 75), ('Adam', 92), ('Bart', 66),
('Lisa', 88)],按名字進行排序
題目需求:
給定一個×××數組, 將數組中全部的0移動到末尾, 非0項保持不變;
在原始數組上進行移動操做, 勿建立新的數組;
#輸入:
第一行是數組長度, 後續每一行是數組的一條記錄;
4
0 =2
7 =1
0 =2
2 =1
#輸出:
調整後數組的內容;
7
2
0
0
n = int(input())
li = [int(input()) for i in range(n)]
#print(li)
def move_zore(item):if item == 0:return 2else:return 1for i in sorted(li,key=move_zore):print(i)