高阶函数

map函数

  • 简介
 """
map(func,*iterables)
参数:一个是函数、一个是序列
作用:将序列中的元素依此作用于函数,将函数运行结果返回
存放于map类型数据中。常用于转化
    注意:存放在map类型的数据中,如果数据被取出,再去取就没有数据了
"""
# "拼接符".join(序列)。要求:序列中的内容必须是字符串类型
# 将序列中的整型转换成字符串类型
list0 = [23,45,67]
# 方法一
new_list = []
for ele in list0:
new_list.append(str(ele))
print(new_list)
# 方法二
new_list = [str(ele) for ele in list0]
print(new_list)
# 方法三
res = map(str,list0)
print(res) # 结果map类型:<map object at 0x10f817c88>
new_list = list(map(str,list0))
print(new_list)
 """
要求:不借助系统方法int、eval,将序列中的内容字符串数据转化为整型类型
"""
num_list = ['','','','','','','','','']
# 方法一
res = list(map(int,num_list))
print(res)
# 方法二
res = list(map(eval,num_list))
print(res)
# 方法三
def get_num(num_ch):
num_dict = {'':1,'':2,'':3,'':4,'':5,'':6,'':7,'':8,'':9}
return num_dict[num_ch]
res = list(map(get_num,num_list))
print(res)

zip函数

  • 简介
 """
zip()
参数:是一个个的序列
作用:传入的是多个序列,将多个序列中的每个位置元素一一对应进行组合,
生成一个新的序列,存放于zip类型的数据中。组合的时候,多数服从少数
"""
res = list(zip((15,23),(45,23,76)))
print(res) # 结果:[(15, 45), (23, 23)]
  • 练习
 # 将字典中的键和值进行颠倒
dict0 = {'a':77,'b':88,'c':99}
new_dict = {v:k for k,v in dict0.items()}
print(new_dict)
# 用zip方法
new_dict = dict(zip(dict0.values(),dict0.keys()))
print(new_dict)

filter函数

  • 简介
 """
fliter(func,*iterables) ---> filter object
参数:一个是函数、一个是序列
作用:进行筛选的。将序列中每一个元素 作用于函数中,
根据函数的返回结果为 False 或 True 来进行保留或者去除该元素
如果为True 表示保留该元素;为False 表示去除该元素
如果函数赋予的是None,默认序列中所有的元素都是保留的
过程:将序列中的每一个元素作用于函数,根据函数返回结果为True的情况下,将该数据存放在filter类型容器中
"""
# 生成一个列表 存放1-10之间的偶数 # 普通方法
new_list = []
for i in range(1,11):
if i % 2 == 0:
new_list.append(i)
print(new_list)
# 列表生成式方法
new_list = [i for i in range(1,11) if i % 2 == 0]
print(new_list)
# 用filter方法
res = list(filter(lambda a:a % 2 == 0,range(1,11)))
print(res)
"""或者"""
def is_even(ele):
return ele % 2 == 0
res = list(filter(is_even,range(1,11)))
print(res)
 """
练习:去除掉列表中的空白字符串
"""
str_list = ['abc','\n\t',' ',' \t','\tgood\n']
# 方法一
new_list = []
for i in str_list:
if len(i.split()) != 0:
new_list.append(i)
print(new_list)
# 方法二
def filter_space(src_str):
return len(src_str.strip())
filter_obj = list(filter(filter_space,str_list))
print(filter_obj)
 """
筛选字典:去除掉字典中不及格的成绩
"""
score_dict = {'语文':77,'数学':88,'政治':49,'英语':66,'历史':47}
# 方法一 普通方法
new_dict = {}
for k, v in score_dict.items():
if v >= 60:
new_dict[k] = v
print(new_dict)
# 方法二 字典生成式
new_dict = {k:v for k, v in score_dict.items() if v >= 60}
print(new_dict)
# 方法三
res = filter(lambda item:item[1] >= 60,score_dict.items())
new_dict = dict(res)
print(new_dict)

sorted函数

  • 简介
 """
sorted(func,*iterables)
参数:第一个是序列、第二个是key、第三个是reverse
作用:排序的。会新建一个序列,包含原有序列的所有内容.
这种排序没有影响原列表,生成了一个新的列表。其他的和列表中的排序方法一致
key接收的是一个函数,函数返回的是每个元素进行排序时的数据格式。若不传函数,默认以原数据大小进行排序
reverse 默认为False 生序;True为降序 """
list0 = [45,2,765,23,85,2,78]
list0.sort(reverse=True) # 列表中原有的排序方式影响的是原列表,没有生成新列表。降序
print(list0) # 根据每个元素取反的值进行降序排序
list0 = [45,2,765,23,85,2,78]
list0.sort(key=lambda ele: -ele,reverse=True)
print(list0) # 用sorted()方法
list0 = [45,2,765,23,85,2,78]
new_list = sorted(list0)
print(new_list)
print(list0)
  • 练习
 # 不影响原列表 按照年龄对列表进行降序排序
dict_list = [{"name":"小明", "age":18},{"name":"小红", "age":17},{"name":"小刚", "age":19}]
new_list = sorted(dict_list, key=lambda item:item["age"],reverse=True)
print(new_list)

reduce函数

  • 简介
 """
reduce(func,*iterables)
参数:一个是函数、一个是序列
作用:将序列中的元素进行累计,
第一次传递的是序列中前两个元素进行累计,求出结果
之后每一次 传递的是上一次的累计结果 和 下一个元素进行累计
注意:函数必须接收两个实参,声明的时候得有两个型参
"""
from functools import reduce
res = reduce(lambda x,y: x*y, [1,2,3,4,5])
print(res) # 结果:120
 """
编写一个函数,接收两个字符串形式的数字作为参数,以字符串形式返回这两个数字的和
比如:
输入:1,1。返回:2
输入:12,34。返回:46
输入:1,99。返回:100
注意:输入的数字有可能很大,不得直接对参数进行强制类型转换
"""
from functools import reduce
# 自定义一个方法,将0-9的字符串转换成0-9数字
def ch_int(num_ch):
num_dict = {'':1,'':2,'':3,'':4,'':5,'':6,'':7,'':8,'':9}
return num_dict[num_ch]
# 自定义一个方法,将连续的多个字符数值转换成整型数据
def str_int(x,y):
int_x = ch_int(x) # 第一个字符
int_y = ch_int(y) # 第二个字符
return int_x * 10 + int_y
value = reduce(str_int,"")
print(value)
# 多位数转换
res_1 = list(map(ch_int,""))
print(res_1)
def str0_int(x,y):
return x * 10 + y
res = reduce(str0_int,res_1)
print(res)
  • 进阶[经典整合]
 """
将上述方法进行整合,完成对字符串数值转换为整型数据
"""
from functools import reduce
def str_int(src_str):
# 将每个字符获取其十进制数据
def ch_int(ch):
num_dict = {'':1,'':2,'':3,'':4,'':5,'':6,'':7,'':8,'':9}
return num_dict[ch]
# 将获取的每一个十进制数据累计成最终的数据整型格式
def to_int(x,y):
return x * 10 + y
# 调用map方法获取每个字符对应的十进制数据
obj = map(ch_int,src_str)
# 调用累计的方法,将map中每个字符对应的十进制数据累计起来
value = reduce(to_int,obj)
return value
res = str_int("")
print(res)

python高级 之(三) --- 高阶函数的更多相关文章

  1. python高级特性和高阶函数

    python高级特性 1.集合的推导式 列表推导式,使用一句表达式构造一个新列表,可包含过滤.转换等操作. 语法:[exp for item in collection if codition] if ...

  2. 【python】python函数式编程、高阶函数

    1.map() : python内置的高阶函数,接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并            返回. def f(x): r ...

  3. python内置常用高阶函数(列出了5个常用的)

    原文使用的是python2,现修改为python3,全部都实际输出过,可以运行. 引用自:http://www.cnblogs.com/duyaya/p/8562898.html https://bl ...

  4. python 函数式编程:高阶函数,map/reduce

    python 函数式编程:高阶函数,map/reduce #函数式编程 #函数式编程一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数 #(一)高阶函数 f=abs f print ...

  5. python入门16 递归函数 高阶函数

    递归函数:函数内部调用自身.(要注意跳出条件,否则会死循环) 高阶函数:函数的参数包含函数 递归函数 #coding:utf-8 #/usr/bin/python """ ...

  6. Python序列函数、高级特性及高阶函数

    序列函数: enumerate: for循环时记录索引,逐个返回元组(i, item) sorted:返回新的有序列表 zip:压缩将多个序列的对应位置的元素组成元组 zip(*元组列表): 解压缩 ...

  7. Python 编程基础之高阶函数篇(一)

      高阶函数:能接受函数作为参数的函数. 如: f=abs def   add(x,y,f): return f(x)+f(y) 如果我们用:add(-5,9,f)来调用该高阶函数,则返回结果为:14 ...

  8. python函数调用顺序、高阶函数、嵌套函数、闭包详解

    一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用错误示范: def foo(): print 'in the foo' bar() foo() 报错: i ...

  9. python 基础 4.3 高阶函数下和匿名函数

    一 .匿名函数 顾名思议就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?lambda 函数就是一种快速定义单行的最小函数,可以用在任何需要函数的地方.   常规版: def fun(x,y ...

随机推荐

  1. java 使用poi读取word文档存入数据库

    使用的poi jar包需要自己下载 读取的word文档中含有多个图片,所以分为两个部分,一个部分读取各个表格中内容,一个是将所有图片截取出来: /** * 遍历段落内容 * docxReadPath ...

  2. IIFE 立即执行函数表达式-模块化

    1)立即执行 2)表达式 3)括号,分号结束 | 前缀运算符 | 表达式上下文 4)只需要执行一次,内部变量无需维护,可用于初始化 (function( ) { })( ); 或 (function( ...

  3. java 获取随机数的方法

    方法一: (数据类型)(最小值 + Math.random()*(最大值-最小值+1) ); 示例: (int)(1+Math.random()*(10-1+1)): 获取int类型 1-10的随机数 ...

  4. Java-判断是否为回文数

    /** * @ClassName: IsPalindrome * @author: bilaisheng * @date: 2017年9月19日 下午2:54:08 * 判断是否为回文数 * true ...

  5. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire (素因子分解+容斥)

    . 样例输入复制 4 4 样例输出复制 14 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons ...

  6. noi.ac #535 生成树

    题目链接:戳我 我们考虑按照编号依次加点,然后维护一个栈. 预设生成树的颜色为color. 对于当前点x,如果它和栈首的点连边颜色相同,那么他们的连边可以作为生成树上面的边,点i已经连接,直接brea ...

  7. NOI2013 二叉查找树

    题目链接:戳我 对于一个排序二叉树来讲,它的中序遍历对应的序列是可以确定的. 我们知道如果求一个访问频率最低的(也就是没有修改),直接就区间DP即可.\(dp[i][j]=min(dp[i][j],d ...

  8. 在vue中引入layer弹框的简易方法

    npm i --save layui-layer 2.在main.js中引入 import layer from "layui-layer"; 3.然后就可以在各个组件中使用lay ...

  9. JQuery动画之淡入淡出动画

    1. 淡入动画 1.1 不带参数的淡入动画 格式: $(selector).fadeIn(); 示例代码: <!doctype html> <html lang="en&q ...

  10. Linux TC限制流量

    一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. Linux流量控制的基本原理如 ...