Python-VBA函数之旅-filter函数

news2024/11/27 20:36:05

目录

一、filter函数的常见应用场景:     

二、filter函数的使用注意事项:

1、filter函数:

1-1、Python:

1-2、VBA:

2、相关文章:

个人主页:非风V非雨-CSDN博客


一、filter函数的常见应用场景:     

        filter函数在Python中有多种实际应用场景,它通常用于从可迭代对象中筛选出满足特定条件的元素。以下是一些具体的应用示例:

1、筛选数字:筛选出一个列表中的所有偶数或奇数。

2、筛选字符串:从字符串列表中筛选出特定长度的字符串。

3、筛选文件:在处理文件或目录时,筛选出特定类型的文件。

4、筛选对象属性:从对象列表中筛选出具有特定属性的对象。

5、筛选字典中的项:从字典中筛选出满足条件的键值对。

6、数据清洗:在处理数据集时,可以使用filter()来清洗数据,去除不符合条件的数据点。

        这些只是filter()函数的一些常见应用场景,实际上它可以用于任何需要从可迭代对象中筛选出特定元素的情况。需要注意的是,由于filter()返回的是迭代器,如果需要多次访问筛选后的结果,或者需要将其与其他Python数据结构(如列表)进行交互,通常需要将迭代器转换为列表或其他类型。

二、filter函数的使用注意事项:

        在Python中使用filter()函数时,下列注意事项需要牢记:

1、输入类型:filter()函数的第一个参数是一个函数,第二个参数是一个可迭代对象(如列表、元组、字符串等),确保传递给filter()的第二个参数是一个可迭代对象,否则会出现类型错误。

2、函数返回值:传递给filter()的函数应该返回一个布尔值(`True`或`False`)。filter()会基于这个返回值来决定是否将元素包含在返回的迭代器中,如果函数返回非布尔值,将会导致不可预期的结果。

3、迭代器的使用:filter()函数返回的是一个迭代器,而不是列表或其他类型的可迭代对象。如果需要列表,你需要将迭代器转换为列表,例如使用list()函数。

4、性能考虑:对于大型数据集,使用filter()可能会比使用列表推导式(list comprehension)稍慢一些,因为列表推导式可以一次性构建结果列表,而filter()需要逐个元素进行过滤。在性能敏感的代码中,可能需要考虑使用其他方法。

5、可读性:虽然filter()函数在某些情况下可以使代码更简洁,但有时候使用列表推导式可能更直观和易读。选择哪种方法取决于具体的场景和个人的编码风格。

6、Python版本差异:在Python 2中,filter()函数直接返回列表,而在Python 3中返回的是迭代器。如果你在Python 2和Python 3之间迁移代码,需要注意这个差异。

7、空迭代器的处理:如果传递给filter()的可迭代对象是空的,或者过滤条件不满足任何元素,那么返回的迭代器将为空。在迭代或使用返回的迭代器之前,你可能需要检查它是否为空。

8、函数定义的位置:如果传递给filter()的函数是在filter()调用之后才定义的,那么将会引发一个`NameError`,因为Python在运行时需要知道这个函数的定义。确保在调用filter()之前已经定义了函数。

        只有遵循这些注意事项,你才能更有效地使用filter()函数来处理数据。然而,在很多情况下,使用列表推导式或其他Python特性可能更加灵活和直观。因此,在选择使用filter()之前,最好先评估一下其他选项是否更适合你的需求。

1、filter函数:
1-1、Python:
# 1.函数:filter
# 2.功能:用于过滤可迭代对象中不符合条件的元素,即通过指定条件过滤序列
# 3.语法:filter(function, iterable)
# 4.参数:
# 4-1. function:用于实现判断的函数,可以为None
# 4-2. iterable:可迭代对象,如列表、range对象等
# 5.返回值:返回一个由符合条件的元素组成的新迭代器
# 6.说明:
# 7.示例:
# 应用1:筛选数字
def is_even(num):
    return num % 2 == 0
even_numbers = filter(is_even, range(100))
print(even_numbers)
print(list(even_numbers))
# <filter object at 0x000002AF671F1240>
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
# 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98]

# 应用2:筛选字符串
def is_length_three(s):
    return len(s) <= 5
words = ['Myelsa', 'Jimmy', 'Lucy', 'Bob', 'Bruce']
three_letter_words = list(filter(is_length_three, words))
print(three_letter_words)
# ['Jimmy', 'Lucy', 'Bob', 'Bruce']

# 应用3:筛选文件
import os
def is_image_file(filename):
    return filename.endswith(('.png', '.jpg', '.jpeg', '.gif'))
files = os.listdir(os.getcwd())
image_files = list(filter(is_image_file, files))
print(image_files)
# ['input.jpg', 'output.jpg']

# 应用4:筛选对象属性
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
def is_adult(person):
    return person.age >= 18
people = [Person('Myelsa', 43), Person('Bruce', 6), Person('Jimmy', 15)]
adults = list(filter(is_adult, people))
for adult in adults:
    print(adult.name)
# Myelsa

# 应用5:筛选字典中的项
def filter_dict_items(dictionary, condition):
    return {k: v for k, v in dictionary.items() if condition(k, v)}
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
filtered_data = filter_dict_items(data, lambda k, v: v > 2)
print(filtered_data)
# {'c': 3, 'd': 4}

# 应用6:清洗数据
data = [1, 2, None, 4, 5, '', 6]
def is_valid(item):
    return item is not None and item != ''
cleaned_data = list(filter(is_valid, data))
print(cleaned_data)
# [1, 2, 4, 5, 6]

# 其他应用
# 在Python中,filter()函数的高阶用法通常涉及到与其他高阶函数(如`map()`、`reduce()`)或函数式编程特性的结合,
# 以及使用lambda表达式来定义匿名函数作为过滤条件。以下是一些filter()函数的高阶用法示例:
# 结合Lambda表达式
# Lambda表达式是一种创建匿名函数的简单方式,经常与filter()一起使用来定义过滤条件
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用lambda表达式筛选偶数
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers)

# 链式过滤
# 你可以通过组合多个filter()函数来实现链式过滤,即一个过滤器的输出作为另一个过滤器的输入
# 假设有一个数字列表,先筛选出偶数,再从中筛选出大于5的数
numbers = [1, 2, 3, 4, 6, 7, 8, 9, 10]
# 链式过滤:先筛选偶数,再筛选大于5的数
filtered_numbers = list(filter(lambda x: x > 5, filter(lambda x: x % 2 == 0, numbers)))
print(filtered_numbers)

# 与生成器表达式结合
# 生成器表达式是另一种创建迭代器的方式,它们可以与filter()结合使用,以更简洁的方式表达过滤逻辑
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用生成器表达式筛选偶数,并与filter结果比较
even_numbers_gen = (x for x in numbers if x % 2 == 0)
even_numbers_filter = filter(lambda x: x % 2 == 0, numbers)
# 二者结果相同,但生成器表达式语法更简洁
print(list(even_numbers_gen))
print(list(even_numbers_filter))

# 自定义过滤函数
# 除了使用lambda表达式,你还可以定义自己的过滤函数,并在filter()中使用它
def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 使用自定义的is_prime函数筛选质数
primes = list(filter(is_prime, numbers))
print(primes)

# 与其他高阶函数结合
# filter()函数经常与其他高阶函数(如`map()`、`reduce()`)一起使用,以在数据管道中执行一系列的转换和过滤操作
from functools import reduce
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# 首先使用map()将每个数平方,然后使用filter()筛选大于20的数,最后使用reduce()求和
squared_numbers = map(lambda x: x ** 2, numbers)
filtered_squared_numbers = filter(lambda x: x > 20, squared_numbers)
sum_of_filtered = reduce(lambda x, y: x + y, filtered_squared_numbers, 0)
print(sum_of_filtered)  # 输出: 105 (即5^2 + 6^2 + 7^2 + 8^2 + 9^2 + 10^2)
1-2、VBA:
略,待后补。
2、相关文章:

2-1、Python-VBA函数之旅-bytes()函数 

2-2、Python-VBA函数之旅-callable()函数

Python算法之旅:Algorithm

Python函数之旅:Functions 

个人主页:https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1603825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker一键快速私有化部署(Ollama+Openwebui) +AI大模型(gemma,llama2,qwen)20240417更新

几行命令教你私有化部署自己的AI大模型&#xff0c;每个人都可以有自己的GTP 第一步&#xff1a;安装Docker(如果已经有了可以直接跳第二步) ####下载安装Docker wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo##…

HTML5 <video> 标签属性、API 方法、事件、自定义样式详解与实用示例

HTML5 <video> 标签为网页内嵌视频提供了强大且便捷的功能。以下是对 <video> 标签的主要属性、API 方法、事件、自定义样式及其使用示例的详细介绍&#xff1a; 一、属性 1. src 定义&#xff1a;指定视频文件的 URL。示例&#xff1a;<video src"my_v…

代码随想录算法训练营第一天 | 704. 二分查找 | 27. 移除元素

704. 二分查找 int search(int* nums, int numsSize, int target) {int left 0, right numsSize, mid;while (left < right) {mid left (right -left) / 2;if (nums[mid] < target) {left mid 1;} else if (nums[mid] > target) {right mid;} else {return mid…

javaswing + mysql通讯录

javaswingaddressbook 需要代码私聊

windows11 wsl2 ubuntu20.04安装vision mamba并进行测试

windows11 wsl2 ubuntu20.04安装vision mamba 安装流程使用cifar-100测试安装成功 安装流程 vision mamba安装了半天才跑通&#xff0c;记录一下流程在wsl上安装cuda wget https://developer.download.nvidia.cn/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05…

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元&#xff0c;这些 SQL 语句要么全部执行成功&#xff0c;要么全部不执行&#xff0c;不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。 事务的主要作用是保证数…

【Python】穿越Python的迭代之旅:while,for 循环的奇妙世界

欢迎来到CILMY23的博客 本篇主题为&#xff1a; 穿越Python的迭代之旅&#xff1a;while&#xff0c;for 循环的奇妙世界 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&…

UE4_动画基础_相同骨骼的动画重定向步骤

学习笔记&#xff0c;仅供参考&#xff01; 动画重定位 是对现有动画稍加修改后用于多个角色的过程&#xff0c;它使你无需创建全新的动画&#xff0c;因为你可以在多个角色间共享动画资源。 存在两种形式的动画重定位&#xff0c;在第一种形式中&#xff0c;你要与之共享动画…

18 统计网站每日的访问次数

1.将竞赛的数据上传HDFS,查看数据的格式 通过浏览器访问hdfs,查看该文档前面的部分数据 每条数据的字段值之间使用逗号隔开的 &#xff0c;最终时间是第五个自动&#xff0c;获取第五个字段值的中的年月日。 2.通过Idea创建项目mr-raceData ,基础的配置 修改pom.xml,添加依赖 …

QML和QtQuick简介以及QML实例

从 Qt 4.7 开始&#xff0c;Qt 引入了一种声明式脚本语言&#xff0c;称为 QML&#xff08;Qt Meta Language 或者 Qt Modeling Language&#xff09;&#xff0c;作为 C 语言的一种替代。而 Qt Quick 就是使用 QML 构建的一套类库。 QML 是一种基于 JavaScript 的声明式语言。…

zookeeper实验部署

一、前期部署 IP地址 主机名安装软件系统版本192.168.10.8 node1apache-zookeeper-3.5.7-bin.tar.gz centos7.5 192.168.10.9 node2apache-zookeeper-3.5.7-bin.tar.gzcentos7.5192.168.10.10 node3apache-zookeeper-3.5.7-bin.tar.gzcentos7.5 二、zookeeper实验部署 2.1 同时…

SRIO系列-基本概念及IP核使用

参考&#xff1a;串行RapidIO: 高性能嵌入式互连技术 | 德州仪器 SRIO协议技术分析 - 知乎 PG007 目录 一、SRIO介绍 1.1 概要 1.2 SRIO与传统互联方式的比较 1.3 串行SRIO标准 1.4 SRIO层次结构&#xff1a; 1.4.1 逻辑层 1.4.2 传输层协议 1.4.3 物理层 二、Xilinx…

Go: 理解 Sync.Pool 的设计

sync 包提供了一个强大且可复用的实例池&#xff0c;以减少 GC 压力。在使用该包之前&#xff0c;我们需要在使用池之前和之后对应用程序进行基准测试。这非常重要&#xff0c;因为如果不了解它内部的工作原理&#xff0c;可能会影响性能。 池的限制 我们来看一个例子以了解它…

ELK及ELFK排错

目录 一、ELK及ELFK排错思路 1.1filebeat侧排查 1.2logstash侧排查 1.3ES、kibana侧问题 一、ELK及ELFK排错思路 1.1filebeat侧排查 第一步&#xff1a;排查filebeat上的配置文件有没有写错&#xff0c;filebeat的配置文件是yml文件&#xff0c;一定要注意格式。 第二步…

【实测】记一次用windows11家庭中文版部署django+vue项目的踩坑之旅

整个过程下来&#xff0c;给我的感觉就和吃了翔一样难受&#xff0c;窒息的感觉&#xff0c;全程没少骂win11的设计者... 因为要调试一些只有在windows才会出现的测试平台bug&#xff0c;于是我耗重金购入了一台顶配windows笔记本。以下是配置&#xff1a; 配置还蛮高的对吧&am…

基于Springboot+Vue+Spring-Security+高德地图API的校园出行管理系统

1介绍 1.1编写目的 明确系统功能与操作流程&#xff0c;说明书提供了详细的系统功能描述和操作指南&#xff0c;使得用户能够了解如何通过系统申请请假、审批流程以及如何管理和监控请假记录等。 1.2文档范围 该文档的目的是解决整个项目系统中“做什么”的问题。对于开发技…

Vue结合ECharts与SpringBoot,实现高效数据库图表绘制

目录 Echart图表的优点 功能丰富 美观性 跨平台兼容性 易于使用 交互性强 扩展性强 社区支持 效果展示 使用Echart的步骤 假数据 1、安装 2、在vue中引入&#xff08;全局引入&#xff09; 3、在vue中的使用 4、模板代码放在哪个位置 5、完整的一个vue页面实例…

如何为Postgres数据库设置安全的访问控制和权限管理

文章目录 解决方案1. 使用角色和权限管理2. 配置认证方法3. 使用网络访问控制4. 定期审查和更新权限 示例代码1. 创建角色并分配权限2. 配置密码认证3. 配置网络访问控制 总结 PostgreSQL是一个功能强大的开源关系型数据库系统&#xff0c;提供了丰富的权限和访问控制机制&…

移动端双验证码登录实现

说明&#xff1a;本文介绍如何用图形验证码短信验证码实现移动端登录思路&#xff1b; 分析 通过手机号图形验证码手机验证码实现登录的时序图如下&#xff1a; 说明&#xff1a; &#xff08;1&#xff09;用户进入登录界面&#xff0c;出现图形验证码&#xff0c;可点击图形…

Jsp 中的getServletContext全局数据共享

servletContext作用于不同用户之上 1. 一个用户将数据保存到了servletContext中, // getcontext的servlet程序 Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context this.get…