Python-VBA函数之旅-filter函数

目录

一、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 = nameself.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 Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falsereturn 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.rhkb.cn/news/313234.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FY-SA-20237·8-ElectricHealing

Translated from the Scientific American, July/August 2023 issue. Electric Healing (电疗) New bandage zaps and medicates chronic wounds 新型创可贴治疗慢性伤口 Paragraph 1 Some wounds won’t heal by themselves. 翻译&#xff1a;一些伤口不会自愈。 解释&…

phpMyadmin 设置显示完整内容

额外选项这里&#xff0c;默认部分内容改成完整内容 方案&#xff1a; 版本>4.5.4.1&#xff0c;修改文件&#xff1a;config.inc.php&#xff0c;添加一行代码&#xff1a; if ( !isset($_REQUEST[pftext])) $_REQUEST[pftext] F;

双向链表详解

目录 带头双向循环链表带头双向循环链表的实现带头双向循环链表的功能实现创造新节点LTNode* CreateLTNode(LTDataType x)代码 初始化链表LTNode*LTInit(LTNode* phead)代码 打印链表void LTPrint(LTNode* phead)代码 链表尾插void LTPushBack(LTNode* phead, LTDataType x)代码…

OpenHarmony 资源调度之内存管理源码分析

作者&#xff1a;张守忠 1 内存管理简介 内存管理部件位于全局资源调度管控子系统中&#xff0c;基于应用的生命周期状态&#xff0c;更新进程回收优先级列表&#xff0c;通过内存回收、查杀等手段管理系统内存&#xff0c;保障内存供给。 1.1 内存管理框架 内存管理部件主要…

韦东山FreeRTOS学习笔记————freertos工程创建

这里写目录标题 一、freertos.c程序结构二、创建任务函数1、动态创建2、静态创建 三、任务调用 一、freertos.c程序结构 1、头文件 2、宏定义、typedef定义… 3、全局变量定义 以下是静态任务的相关变量配置&#xff0c;相当于正点原子例程里的TASK1、TASK2…任务配置 以下…

微信小程序展示倒计时

html <view class"countdown"> <text>倒计时&#xff1a;</text> <text wx:for"{{countdown}}" wx:key"index">{{item}}</text> </view> ts data: {countdown: [], // 存放倒计时数组 targetTime:…

MSSQL 命令行操作说明 sql server 2022 命令行下进行配置管理

说明&#xff1a;本文的内容是因为我在导入Access2019的 *.accdb 格式的数据时&#xff0c;总是出错的背景下&#xff0c;不得已搜索和整理了一下&#xff0c;如何用命令行进行sql server 数据库和用户管理的方法&#xff0c;作为从Access2019 直接导出数据到sql server 数据库…

数据结构(六)----串

目录 1.串的定义 2.串的基本操作 3.串的存储结构 (1)串的定义 •顺序存储 •链式存储 (2)求串长 (3)求子串 (4)比较串的大小 (5)定位操作 4.字符串的模式匹配 (1)朴素模式匹配算法 (2)KMP算法 •求模式串中的next数组&#xff08;重点&#xff09; •练习&#…

【C++】二维数组传参方式

最近刚开始刷剑指offer&#xff0c;刚做到第三题的时候&#xff0c;发现C二维数组的传参方式和C语言略有些不同&#xff0c;所以在这篇博客中&#xff0c;会列出C/C常见的二维数组传参方式。&#xff08;本方式和代码都是基于vs环境所编写&#xff09; 一.C语言二维数组传参方式…

如何将Oracle 中的部分不兼容对象迁移到 OceanBase

本文总结分析了 Oracle 迁移至 OceanBase 时&#xff0c;在出现三种不兼容对象的情况时的处理策略以及迁移前的预检方式&#xff0c;通过提前发现并处理这些问题&#xff0c;可以有效规避迁移过程中的报错风险。 作者&#xff1a;余振兴&#xff0c;爱可生 DBA 团队成员&#x…

React【Day2】

React表单控制 受控绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 双向绑定 MVVM 报错记录&#xff1a; 错误代码&#xff1a; import { useState } from "react";const App () > {const [value, setValue] useS…

OpenCV从入门到精通实战(八)——基于dlib的人脸关键点定位

本文使用Python库dlib和OpenCV来实现面部特征点的检测和标注。 下面是代码的主要步骤和相关的代码片段&#xff1a; 步骤一&#xff1a;导入必要的库和设置参数 首先&#xff0c;代码导入了必要的Python库&#xff0c;并通过argparse设置了输入图像和面部标记预测器的参数。…

从OWASP API Security TOP 10谈API安全

1.前言 应用程序编程接口&#xff08;API&#xff09;是当今应用驱动世界创新的一个基本元素。从银行、零售、运输到物联网、 自动驾驶汽车、智慧城市&#xff0c;API 是现代移动、SaaS 和 web 应用程序的重要组成部分&#xff0c;可以在面向客 户、面向合作伙伴和内部的应用程…

从零实现诗词GPT大模型:数据集介绍和预处理

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 本章将介绍该系列文章中使用的数据集&#xff0c;并且编写预处理代码&#xff0c;处理成咱们需要的格式。 一、数据集介绍 咱们使用的数据集名称是chinese-poetry&#xff0c;是一个在github上开源的中文诗…

Android开发:Camera2+MediaRecorder录制视频后上传到阿里云VOD

文章目录 版权声明前言1.Camera1和Camera2的区别2.为什么选择Camera2&#xff1f; 一、应用Camera2MediaPlayer实现拍摄功能引入所需权限构建UI界面的XMLActivity中的代码部分 二、在上述界面录制结束后点击跳转新的界面进行视频播放构建播放界面部分的XMLActivity的代码上述代…

一个基于单片机内存管理-开源模块

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

Linux 添加启动服务--Service

1&#xff0c;服务配置service文件 Service 服务的实际作用是开启后自动启动服务&#xff0c;运行一些不须要登录的程序&#xff0c;任务。 实例1、上电自动连接WIFI热点 1.1 新建.service文件 /etc/systemd/system/wificonnect.service [Unit] DescriptionService [wifico…

react 项目路由配置(react-router-dom 版本 v6.3、v6.4)

根据 react-router-dom 的版本&#xff0c;有不同的方式 一、react-router-dom v6.3 用到的主要 api: BrowserRouteruseRoutesOutlet 下面是详细步骤&#xff1a; 1、index.js BrowserRouter 用来实现 单页的客户端路由使用 BrowserRouter 包裹 App放在 顶级 位置&#x…

【IoTDB 线上小课 02】开源增益的大厂研发岗面经

还有友友不知道我们的【IoTDB 视频小课】系列吗&#xff1f; 关于 IoTDB&#xff0c;关于物联网&#xff0c;关于时序数据库&#xff0c;关于开源...给我们 5 分钟&#xff0c;持续学习&#xff0c;干货满满~ 5分钟学会 大厂研发岗面试 之前的第一期小课&#xff0c;我们听了 I…

【leetcode面试经典150题】58. 两数相加(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…