其中.get(A,0)
如果找到A 就返回A对应的value,未找到则返回0,除非保证都能找到,不然得写0
f=sin
f=sin()
区别:第一个可以是f(3) 第二个只是sin()的返回值
def fun(x,y,fc):
return fc(x),fc(y)
print(fun(-1,-2,abs))
内置高阶函数
map() 接受两个参数,一个函数一个序列
让函数作用序列每一个值
a=map(abs,[1,-1,-3,2])
print(list(a))
返回随即10个2-7数字的阶乘
import random
def jc(n):
if n==0 or n==1:
return 1
else:
return n*jc(n-1)
a=map(jc,[random.randint(2,7) for i in range(10)])
print(list(a))
reduce:把一个函数作用在一个序列上,这个函数必须接受两个参数
reduce把结果继续和序列的下一个元素累计计算
from functools import reduce
reduce(f,[x1,x2,x3,x4,x5])
=f(f(f(f(x1),x2),x3),x4),x5)
例如
def ss(x,y):
return x+y
print(reduce(ss,[1,2,3,4,5]))
15
过滤函数
filter函数
类似map,接受函数和序列,
但是filter把传入的函数依次作用于每一个元素,根据返回值
true false决定保留与丢弃
def isodd(x):
if x%2==0:
return True
reture False
print(list(filter(isodd,range(100))))
def zhs(x):
for i in range(2,x):
if x %i==0:
return False
return True
print(list(filter(zhs,range(2,101))))
li=[1,2,3]
li.sort()
li.sort(reverse=True)
sorted(li)
sorted(li,reverse=True)
li={
("a",11,166),
("b",13,15),
("c",15,16)}
def xs(x):
return x[1]
def xs2(x):
return x[2]
print(sorted(li,key=xs))
print(sorted(li,key=xs2))
[('a', 11, 166), ('b', 13, 15), ('c', 15, 16)]
[('b', 13, 15), ('c', 15, 16), ('a', 11, 166)]
排序初步
li = [4, 0, 7, 0, 2]
def xc(x):
if x == 0:
return 1
else:
return 0
print(sorted(li,key=xc))
首先生成对应值下标
[4,0,7,0,2] [4,7,2,0,0]
[0,1,0,1,0] 再根据下标从小到达排序[0,0,0,1,1]
返回大的值在后面
也可以return 3 2 想要排序在后面的元素必须要返回值大于在前面的值
################################
li = [4, 0, 7, 1, 0, 2, 3]
def xc(x):
if x == 0:
return 4
elif x == 1:
return 3
else:
return 2
print(sorted(li, key=xc))
################################