【Python】学习笔记——-5.1.2、高阶函数之filter

Python高阶函数-filter 使代码更声明式提高内存效率方便组合多个操作提升复杂过滤逻辑的可读性。 阅读详情

Python内建的filter()函数用于过滤序列。

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 结果: [1, 5, 9, 15]

把一个序列中的空字符串删掉,可以这么写:

def not_empty(s):
    return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
# 结果: ['A', 'B', 'C']

可见用filter()这个高阶函数,关键在于正确实现一个“筛选”函数。

注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

用filter求素数

计算素数的一个方法是埃氏筛法,它的算法理解起来非常简单:

首先,列出从2开始的所有自然数,构造一个序列:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数5,然后用5把序列的5的倍数筛掉:

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

不断筛下去,就可以得到所有的素数。

用Python来实现这个算法,可以先构造一个从3开始的奇数序列:

def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n

注意这是一个生成器,并且是一个无限序列。

然后定义一个筛选函数:

def _not_divisible(n):
    return lambda x: x % n > 0

最后,定义一个生成器,不断返回下一个素数:

def primes():
    yield 2
    it = _odd_iter() # 初始序列
    while True:
        n = next(it) # 返回序列的第一个数
        yield n
        it = filter(_not_divisible(n), it) # 构造新序列

这个生成器先返回第一个素数2,然后,利用filter()不断产生筛选后的新的序列。

由于primes()也是一个无限序列,所以调用时需要设置一个退出循环的条件:

# 打印1000以内的素数:
for n in primes():
    if n < 1000:
        print(n)
    else:
        break

注意到Iterator是惰性计算的序列,所以我们可以用Python表示“全体自然数”,“全体素数”这样的序列,而代码非常简洁。

练习

回数是指从左向右读和从右向左读都是一样的数,例如12321,909。请利用filter()滤掉非回数:

# -*- coding: utf-8 -*-

def is_palindrome(n):
# 测试:
output = filter(is_palindrome, range(1, 1000))
print(list(output))
【Python函数式编程③】——Python高阶函数 map、reduce、filter 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。 阅读详情

相关推荐

CAN通信:EB中配置CAN驱动,配置参数解析

以S32K314芯片说明,其他芯片不同,参数配置也有差异。

zhangxiaio1的博客 2169

Python-----filter

Python内建的filter()函数用于过滤序列。 和map()类似,filter()也接收一个函数和一个序列。和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。 例如,在一个list中,删掉偶数,只保留奇数,可以这么写: def is_odd(n): return n % 2 == 1 list(

山城木府 840

告别环境配置烦恼:用Conda一键搞定GATK4、samtools、fastp等生信分析全家桶

本文介绍如何利用Conda快速搭建包含GATK4、samtools、fastp等工具的生物信息学分析环境,解决软件安装和版本冲突问题。通过详细的配置步骤和实战案例,帮助研究者十分钟内完成重测序分析全家桶的环境配置,显著提升上游分析效率。

weixin_30753873的博客 334

filter中的na值

根据卡号自动得出相应的数值:有NA值,下面用IFERROE试图去掉NA值:

berrrrr的博客 641

e-puck场景搭建

可以注意到一个黑色的小窗口出现在三维视图的左上角。它显示了电子吸盘机器人的摄像头拍摄的图像。该图像将保持黑色,直到机器人的控制器明确启用相机。最后,单击右上角的“x”可以关闭它。在对话框中,选择PROTO节点(Webots项目)/robots/gctronic/e-puck/e-puck(Robot)。一个电子吸盘机器人应该出现在竞技场的中央。通过按Alt+左键单击+拖动,对机器人施加力。无法对WoodenBox节点施加力,因为默认情况下,它们没有质量,并且被视为粘在地板上。将新控制器与机器人链接。

weixin_66540163的博客 767

Windows平台高效BLE调试工具开发指南

本文为开发者提供了一份在Windows平台上开发高效BLE调试工具的详细指南。文章深入探讨了使用32feet.NET库进行蓝牙低功耗设备扫描、连接、数据通信及进阶功能开发的实战经验,旨在帮助开发者打造功能自定义、性能优化的专属调试利器,显著提升物联网和嵌入式设备的调试效率。

weixin_29201933的博客 256

解锁无限潜力,在没有数组溢出情况下,掌握Filter公式正确用法

今天我要和大家分享一些关于Filter公式的知识,这将帮助你们解决没有数组溢出情况下的问题。因此,当我们没有数组溢出功能时,需要先选中区域,在公式编辑栏中输入公式,然后按CTRL+SHIFT+Enter。所以我们需要添加一个条件格式,让错误值不显示,我们选择H:L列,然后在条件格式下新建一条规则。但这样会带来一个问题,如果实际数据只有3行,剩余区域就会变成#N/A错误值,非常影响美观。正确使用Filter公式的方法,让你轻松应对这个问题,并发挥出无限的潜力!所以,亲爱的朋友们,不要再被没有数组溢出。

qq_39891419的博客 3138

基于因果推理的LLM去毒:精准定位注意力头实现高效干预

在大型语言模型(LLM)的部署与应用中,模型安全与可控性是核心挑战之一。传统方法如全参数微调成本高昂,且可能损害模型通用能力。本文聚焦于一种基于因果推理的精准干预技术,其原理在于利用因果发现算法定位Transformer模型中与“毒性”输出存在强因果关联的特定注意力头。该技术通过分析注意力头的激活模式与生成文本毒性分数之间的因果关系,识别出关键责任单元,而非依赖传统的相关性分析。其技术价值在于实现了轻量级、高可解释性的模型行为修正,能以极低的参数改动代价有效降低模型在敏感话题上的有害输出。在应用场景上,该方

weixin_32667439的博客 313

python的高阶函数的小实践

python一些高阶函数的小实践

Xu_Mingyong的博客 721

2026年华为OD机试真题 新系统【点亮战争迷雾】

华为OD机试真题 8月18号 新系统【点亮战争迷雾】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【点亮战争迷雾】多语言题解。

qq_45776114的博客 494

基于深度学习的电力系统暂态稳定评估与预防控制复现

本文复现了基于深度学习的电力系统暂态稳定评估与预防控制方法。主要内容包括:(1)数据预处理环节,对IEEE 39节点系统的电压幅值、相角等特征数据进行归一化处理;(2)ACNGAT模型实现,该模型结合时间卷积网络(TCN)和图注意力网络(GAT)提取时空特征;(3)采用改进的帝企鹅优化算法进行预防控制。关键技术点包括:融合时空信息的特征提取、改进的邻接矩阵构建方法(λ_ij = E_i * E_j * B_ij)以及时空注意力机制。代码实现采用Python和PyTorch框架。

huanghm88的专栏 336

Python--高阶函数、利用filter()删除None或者空字符串

1. 高阶函数 高阶函数就是一个函数可以用来接收另一个函数作为参数, 这样的函数叫做高阶函数。 def add_num(a, b): return abs(a) + abs(b) result = add_num(-1, 2) print(result) def add_num(a, b, f): return f(a) + f(b) result = add_num(-1, 2, abs) print(result) 1.1 内置高阶函数:map() map函数:

天行健 君子以自强不息,地势坤 君子以厚德载物。 3505

出现 has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the 解决方法

Access to XMLHttpRequest at 'http://127.0.0.1:5000/api/data' from origin 'http://10.197.0.79:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

码农研究僧的博客 1万+

python中的高阶函数

@ 1 什么是高阶函数? 只要满足下面的任意一个条件就是高阶函数 1、一个函数的函数名作为参数传给另外一个函数 2、一个函数返回值(return)为另外一个函数(返回为自己,则为递归) 下面分别举例详细说明: 1.1 高阶函数:一个函数的函数名作为参数传给另外一个函数 def func(): print("定义一个普通函数") def high_level(func): ...

求真、务实 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【python】Python 高阶函数map、reduce、filter、sorted

高阶函数(Higher-Order Function)是指能够接收函数作为参数,或者将函数作为返回值的函数。Python 内置了多种高阶函数,它们为我们提供了编写简洁代码的能力。lambda高阶函数为我们提供了一种优雅的方式来处理可迭代对象。通过合理运用mapreducefilter和sorted,我们可以编写出更加简洁和高效的 Python 代码。lambda表达式的配合使用,更是让代码显得简洁且富有表现力。

longforone的博客 1923

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

python中filter()高阶函数

# filter()函数是python内置的另一个有用的高阶函数 # filter()函数接收一个函数f和一个list, # 这个函数f的作用是对每个元素进行判断,返回True或False # filter()根据判断结果自动过滤掉不符合条件的元素 # 返回由符合条件元素组成的新list a = [1, 2, 3, 4, 5, 6] b = filter(lambda x: x % 2 ...

CoolBreeze的博客 9361

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Python3中一些高阶函数map、reduce、filter详解及示例

在编程语言中,高阶函数指的是接受函数作为输入或输出的函数。 map概述 python中的map()函数是一个内置的高阶函数,一般用法是map(function, iterable)。需要传入一个函数,这个函数可以是内置的,也可以是自己定义,也可以是匿名函数即lambda。第二个参数是一个可迭代对象,如列表、字典字符串等。map函数返回的是一个map对象,也是一个可迭代对象,可以利用for循环迭...

若数的博客 1630

python中的高阶函数以及常见的内置高阶函数(map、reduce、filter、sorted)

1.什么是高阶函数? 高阶函数的实参是一个函数名 高阶函数的返回值是一个函数 函数本身也可以赋值给变量,变量也可以指向函数 高阶函数传递的参数包括函数名 2.常见的内置高阶函数 (1)map函数 map():接收两个参数,一个是函数,一个是序列 map将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回 举例:对于序列[-1,3,-5,-2]的每个元素求绝对值 举例...

ymeng9527的博客 905

【Python】—— 高阶函数

高阶函数详解

m0_56069910的博客 1856

python 函数式编程之高阶函数filter

python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 高阶函数filter Python内建的filter()函数用于过滤序列。 和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。 例如,在一个list中,删掉偶数,只保留奇数,可以这么写: de...

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 463

Python 高阶函数的使用之 map、filter 和 reduce

在 Python 中,高阶函数(Higher-Order Functions) 是指能够接受一个或多个函数作为参数,或者返回一个函数的函数。高阶函数能够让代码更加简洁、优雅,提高可读性和开发效率。Python 提供了多个常用的高阶函数,其中 `map()`、`filter()` 和 `reduce()` 是三种非常重要的函数式编程工具,分别用于映射、过滤和归约操作。本文将详细介绍它们的用法,并结合实际案例来展示如何利用这些函数简化代码。

945

python中的高阶函数的定义及内置高阶函数

高阶函数介绍 普通函数中的参数是一种数据类型,比如列表,字符串,整型 高阶函数的实参是一个函数名,函数的返回值是一个函数。 例如在python中有一个函数是 abs 用来求整型的绝对值: 函数可以复制成一个变量。 def fun(x,y,f): return f(x),f(y) print(fun(-10,34,abs)) # f = abs 几个内置高阶函数 ma...

thermal_life的博客 1759

python高阶函数map reduce filter sorted_Python高阶函数map、reduce、filter、sorted的应用

what's the 高阶函数把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。python内置的高阶函数主要有map、reduce、filter、sorted,当然我们可以自己编写高阶函数Map函数map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的对象返回,返回值是一个可迭代对象,可以用list()方...

weixin_39959192的博客 217

python中的内置高阶函数(map,reduce及filter)

文章目录 一.高阶函数的定义 二.

qq_36275923的博客 585

不得不知的python高阶函数(Map、Reduce、Filter)

Map函数 map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 Reduce函数 reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算。 Filter函数 filter()函数用于过滤序列

sky_F的博客 7325
上一篇: 【Python】学习笔记——-5.1.1、高阶函数之map/reduce
下一篇: 【Python】学习笔记——-5.1.3、高阶函数之sorted
白衣染霜陈
博客等级 码龄22年 682粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值