初学者python笔记(map()函数、reduce()函数、filter()函数、匿名函数)

2023-05-16

文章目录

      • 一、匿名函数
      • 二、map()函数
      • 三、reduce()函数
      • 四、filter()函数
      • 五、三大函数总结

本篇文章内容有Python中的匿名函数和map()函数、reduce()函数、filter()函数这三大封装函数(遍历处理),以及它们的使用案例。 文末是对这几个函数用法功能的比较。

一、匿名函数

该函数的用法类似于C语言中的宏定义,只是这个不需要定义名字,故叫匿名函数,但它们的作用都是用来提供一个简短的函数。

print(lambda x:x+1)  #打印匿名函数的内存地址
func1 = lambda x:x+1  #调用匿名函数第1步
func2 = lambda x,y:x*y  #两个参数的匿名函数
print(func1(10))	#调用匿名函数第2步
print(func2(4,130))   #需要传入两个参数以符合x,y
name = '鸣人'
func3 = lambda x:x + '——羊村村长'
print(func3(name))

运行结果:
<function at 0x02C07B70>
11
520
鸣人——羊村村长

二、map()函数

  1. 函数嵌套——把函数当做一个参数传给另外一个函数
def foo(n):
	print(n)
def bar(name):
	print("my name is %s"%name)  #使用了百分号类的字符串拼接
foo(bar('小沈阳'))
#会先传入“小沈阳”执行bar(),并输出,
#再将bar()的返回值,即None传入foo()中,并输出形参

运行结果:
my name is 小沈阳
None

  1. 低级函数封装
num_1 = [1,2,3,4,5]
def map_test(array):
	ret = []
	for i in array:  #把列表中的所有元素都乘2
		ret.append(i*2)
	return ret  #可以返回一个列表
ret = map_test(num_1)  #执行封装函数
print(ret)

运行结果:
[2, 4, 6, 8, 10]

  1. 高级封装函数——最接近map()函数的本质
num_1 = [1,2,3,4,5]
def cut_one(x):  #定义一个做减1运算的函数
	return x-1
def add_one(x):   #定义一个做加1运算的函数
	return x+1
def map_test(func,array):  #定义一个做全部遍历的函数,并执行相关操作的函数
	ret=[]
	for i in array:
		res=func(i)   #add_one
		ret.append(res)
	return ret
print(map_test(add_one,num_1))   #加1
print(map_test(cut_one,num_1))   #减1

运行结果:
[2, 3, 4, 5, 6]
[0, 1, 2, 3, 4]

  1. map()函数+匿名函数——终极用法
    传入一个函数和一个列表到封装函数中,好处是可以根据需求传入各种定义的函数,将列表中所有的元素做处理
#第一个参数是一个函数,第二个参数是一个可迭代对象(可循环的)
num_1 = [1,2,3,4,5]
res = map(lambda x:x+1,num_1)  #每个数都加1
print(list(res))  #打印的时候必须输出列表
msg='yourself'
print(list(map(lambda x:x.upper(),msg)))  #将所有字符都变大写
#map()函数返回的是内存地址,需要list列表化或者tuple元组化才可以打印出对应的值

运行结果:
[2, 3, 4, 5, 6]
[‘Y’, ‘O’, ‘U’, ‘R’, ‘S’, ‘E’, ‘L’, ‘F’]
原来,map()函数是做批量处理用的

三、reduce()函数

  1. 初级reduce()——简单的单函数
num = [1,2,3,4,5,6,100]
def reduce_test(array):
    res = 0
    for n in array:  #将num中的元素都累加起来
        res += n
    return res
print(reduce_test(num))

运行结果:121

  1. 进阶reduce()——函数嵌套
num = [1,2,3,4,5,100]
def reduce_test(func,array,init=None):  #某参数=None则为非必须参数
    if init == None:
        res = array.pop(0)
        #用户没有输入值,则将第一个值赋值给res,并且删除第一个值,实现每乘完一个就取出一个
    else:
        res = init  #用户输入了一个值
    for n in array:  #将num中的元素都累乘起来
        res = func(res,n)  #传入的两个参数是需要相乘的两个数,每次都传入了func相乘后都更新res的值
    return res
print(reduce_test(lambda x,y:x*y, num, 2))
#该匿名函数接收两个参数对x,y两个参数做相乘处理

运行结果:
24000

  1. reduce()函数——终极reduce
    注意:该函数使用前需要从functools库中导入。
    即:from functools import reduce
from functools import reduce
num = [1,2,3,4,5,100]
print(reduce(lambda x,y:x*y, num, 2))
#reduce函数必须导入functools模块,且第三个参数是非必须参数,为初始值

运行结果:
24000
很明显,reduce()函数做整合用的。

四、filter()函数

这个函数在我的文章:初学者python笔记(filter()函数完全详解)里已经专门介绍了,这里就不做详细分析,只拿出最后的用法。

people_onepiece=[
    {'name':'路飞','age':19},  #列表中有5个字典,每个字典都有2个键值对
    {'name':'娜美','age':20},
    {'name':'山治','age':22},
    {'name':'乔巴','age':12},
    {'name':'乌索普','age':21}
    ]
print(list(filter(lambda n:n['age']<=20,people_onepiece)))
#传入的参数是一个判断年龄的匿名函数,一个列表
#如果年龄小于20岁,则将该字典保留下来

运行结果:
[{‘name’: ‘路飞’, ‘age’: 19}, {‘name’: ‘娜美’, ‘age’: 20}, {‘name’: ‘乔巴’, ‘age’: 12}]
可以看出,filter()函数是做筛选用的

五、三大函数总结

map()函数,filter()函数,reduce()三大批量处理函数总结:
map函数是将一个列表中所有的元素都处理了一遍(最终返回的还是一个完整列表,位置和顺序都不变)

filter函数是将一个列表中所有的元素筛选了一遍,判断每个元素得到的布尔值(最终返回的是被筛选过的元素组成的一个列表)

reduce函数是把一个完整的列表都整合出另一个数据,或累加结果,或累乘结果(最终返回的是一个元素)

map函数每个元素都会变
filter函数保留符合条件的元素
reduce函数整合出新元素
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初学者python笔记(map()函数、reduce()函数、filter()函数、匿名函数) 的相关文章

  • Pytorch可视化特征图(代码 亲测可用)

    2013年Zeiler和Fergus发表的 Visualizing and Understanding Convolutional Networks 早期LeCun 1998年的文章 Gradient Based Learning Appl
  • Pytorch深度学习常用预训练网络模型的下载地址

    Resnet model urls 61 resnet18 https download pytorch org models resnet18 5c106cde pth resnet34 https download pytorch or
  • matlab 使用pointcloud类在geotiff文件的基础上选择点

    Import all 4 5 million points from a laz file pc 61 pointCloud 39 ALS strip laz 39 Plot all points of point cloud pc plo
  • Flutter报错:Android toolchain “but Android SDK not found at this location”

    Flutter报错 Android toolchain but Android SDK not found at this location 当前环境 macOS 10 13 6Android Studio 3 5Android Studi
  • matlab 点云滤波(中值、均值、高斯滤波)代码

    点云中值 均值 高斯滤波 介绍一下滤波函数 smoothdata 对含噪数据进行平滑处理 B 61 smoothdata method 为上述任一语法指定平滑处理方法 例如 xff0c B 61 smoothdata A 39 sgolay
  • 时间复杂度

    1 时间复杂度 在进行算法分析时 xff0c 语句总的执行次数T n xff09 是关于问题规模n的函数 xff0c 然后分析T n xff09 随n的变化 这样用大写的O来标记算法的时间复杂度 xff0c 称之为大O Order的简写 x
  • 解决电脑80端口被占用问题!亲测有用!!!

    方法1 xff1a 1 在桌面 xff0c 按下 WINDOW 43 R 快捷键 2 在弹出的命令行窗口下执行下面的命令 xff1a cmd xff0c 点击确定 3 输入net stop http xff0c 点击确定 xff0c 再次输
  • linux 下 常见 知识点

    1 etc resolv conf ping通baidu com DNS 域名解析服务器 xff01 该文件是DNS域名解析的配置文件 xff0c 它的格式很简单 xff0c 每行以一个关键字开头 xff0c 后接配置参数 resolv c
  • 学习51单片机经历

    学习51单片机的记录 文章目录 前言一 所使用的软硬件设备二 学习课程三 学习内容1 软件安装2 单片机基础3 真正开始学习 xff08 一 xff09 LED灯 总结修改日志 前言 提示 xff1a 只是记载本人学习51单片机的经历 xf
  • LED灯系列

    LED灯系列 本系列为stc89c52RC单片机开发板上LED灯相关操作思路和代码 点此链接转到专栏目录链接 http t csdn cn skf2j 文章目录 LED灯系列1 xff09 原理2 xff09 单个LED灯常亮3 xff09
  • Angular CLI的安装报错

    一 安装步骤 angular cli它是angular框架官方的一个构建工具 xff0c 当你使用 ng new xxx 项目名 创建一个项目时 xff0c 会自动生成项目结构 Angular CLI用于简单 xff0c 快速构建Angul
  • 最新Anaconda3的安装配置及使用教程

    安装记录参考链接 出现问题 xff1a 镜像地址无效 不知道 设置Anaconda镜像 那一步我哪里没有操作好 答 步骤错了 正确步骤 xff1a 1 先执行 conda config set show channel urls yes 生
  • Linux 环境变量:DISPLAY

    1 dbvis no x11 display variable was set but this program performed an operation which requires it solution export DISPLA
  • PostgreSQL入门-安装与基本使用(Ubuntu)

    PostgreSQL入门 安装与基本使用 xff08 Ubuntu xff09 PostgreSQL 是一个免费的对象 关系数据库服务器 ORDBMS xff0c 号称是 世界上最先进的开源关系型数据库 PostgreSQL 是以加州大学计
  • windows下的pycharm项目部署同步到Linux下的pycharm开发

    windows下的pycharm项目部署同步到Linux下的pycharm开发 一 运行平台二 SSH连接远程服务器 一 运行平台 项目部署系统 xff1a UOS 项目开发平台 xff1a windows10 IDE xff1a PyCh
  • redhat操作系统升级红帽6升级到红帽7linux升级

    本文档介绍了从 RHEL 6 到 RHEL 7 就地升级的步骤 支持的就地升级路径是从 RHEL 6 10 到 RHEL 7 9 如果您的 RHEL 系统满足以下条件 xff0c 则完全支持此 RHEL 6 到 RHEL 7 升级过程 xf
  • Kubernetes角色访问控制RBAC和权限规则(Role+ClusterRole)---好文

    基于角色的访问控制 xff08 Role Based Access Control 即 RBAC xff09 使用 rbac authorization k8s io API Group实现授权决策 xff0c 允许管理员通过Kuberne
  • 你知道abrt-hook-ccpp吗

    1 什么是abrt hook ccpp abrt也可以叫abrtd xff0c 展开应该是automatically bug report daemon xff0c 也就是自动错误报告守护进程 从字面意义就可以看出 xff0c 他是一个守护
  • Mobaxterm 使用图形界面

    redhat 7 yum install firefox xorg x11 xauth mesa libGLES devel x86 64 mesa dri drivers vi etc ssh sshd config X11Forward
  • Linux ❉ Chronyd时间同步服务器详解

    一 介绍 1 简介 集群中节点之间需要时间同步 xff0c Chronyd不依赖外部的时间服务NTP xff0c 在内部搭建时间服务器 Chrony是网络时间协议 xff08 NTP xff09 的一种实现 xff0c 是一个类Unix系统

随机推荐