1.高阶函数 -实参是一个函数名 -函数的返回值是一个函数 print(abs(16)) f = abs print(f(-10)) #函数本身也可以赋值给变量 变量可以指向函数 def fun(x,y,f): return f(x),f(y) print(fun(-10,34,abs))

2.内之高阶函数_map

map():接收两个参数,一个是函数 一个是序列 map将传入的函数依次作用到序列的每个元素,并且把结果作为新的序列返回

#对于一个序列[-1,3,-4,-5]的每一个元素求绝对值

import random

print(list(map(abs,[-1,3,-4,-5])))

#对于每个元素求阶乘

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)))

#将一个字符串转换成整型

from functools import reduce

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 00

	n = int(input())

li = [int(input()) for i in range(n)]

#print(li)

def move_zore(item): if item == 0: return 2 else: return 1 for i in sorted(li,key=move_zore): print(i)