4 个你可能不知道的 Python 迭代工具过滤器函数
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景
当您只想循环遍历迭代器、检索序列中的元素并处理它们时,这些元素特别有用 - 所有这些都无需将它们存储在内存中。今天我们将学习如何使用以下四个迭代工具过滤器函数:
- filterfalse
- takewhile
- dropwhile
- islice
让我们开始吧!
开始之前:有关代码示例的说明
在本教程中:
- 我们将讨论的所有四个函数都给出了迭代器。为了清楚起见,我们将使用简单的序列,并用于获取包含迭代器返回的所有元素的列表。但是,除非必要,否则在处理长序列时不要这样做。因为当您这样做时,您将失去迭代器为您提供的内存节省。
list() - 对于简单的谓词函数,您还可以使用 lambda。但为了更好的可读性,我们将定义常规函数并将它们用作谓词。
1. filterfalse
如果你已经用Python编程了一段时间,你可能会使用内置函数和语法:filter
filter(pred,seq)
# pred: predicate function
# seq: any valid Python iterable
该函数提供了一个迭代器,该迭代器从谓词返回的序列中返回元素。filterTrue
让我们举个例子:
nums = list(range(1,11)) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]def is_even(n):return n % 2 == 0
在这里,列表和函数分别是序列和谓词。numsis_even
为了获取 中所有偶数的列表,我们使用如下所示的:numsfilter
nums_even = filter(is_even, nums)
print(list(nums_even))
Output >>> [2, 4, 6, 8, 10]
现在让我们了解.我们将从 itertools 模块导入函数(以及我们将讨论的所有其他函数)。filterfalsefilterfalse
顾名思义,与函数的作用相反。它提供了一个迭代器,该迭代器返回谓词返回的元素。以下是使用该函数的语法:filterfalsefilterFalsefilterfalse
from itertools import filterfalse
filterfalse(pred,seq)
该函数返回 中的所有奇数。因此,使用获得的列表是以下所有奇数的列表:is_evenFalsenumsnums_oddfilterfalsenums
from itertools import filterfalsenums_odd = filterfalse(is_even, nums)
print(list(nums_odd))
Output >>> [1, 3, 5, 7, 9]
2. takewhile
使用该函数的语法为:takewhile
from itertools import takewhile
takewhile(pred,seq)
该函数给出一个迭代器,只要谓词函数返回 .当谓词首次返回时,它将停止返回元素。takewhileTrueFalse
对于 n 长度序列,if 是谓词函数返回的第一个元素,则迭代器返回 ,..., .seq[k]Falseseq[0]seq[1]seq[k-1]
考虑以下列表和谓词函数。我们使用如下所示的函数:numsis_less_ than_5takewhile
from itertools import takewhiledef is_less_than_5(n):return n < 5nums = [1, 3, 5, 2, 4, 6]
filtered_nums_1 = takewhile(is_less_than_5, nums)
print(list(filtered_nums_1))
在这里,谓词首次返回数字 5:is_less_than_5False
Output >>> [1, 3]
3. dropwhile
在功能上,函数执行与函数相反的操作。dropwhiletakewhile
以下是使用该函数的方法:dropwhile
from itertools import dropwhile
dropwhile(pred,seq)
该函数提供了一个不断丢弃元素的迭代器,只要谓词是 .这意味着迭代器在谓词第一次返回之前不会返回任何内容。一旦谓词返回,迭代器返回序列中的所有后续元素。dropwhileTrueFalseFalse
对于 n 长度序列,if 是谓词函数返回的第一个元素,则迭代器返回 ,..., .seq[k]Falseseq[k]seq[k+1]seq[n-1]
让我们使用相同的序列和谓词:
from itertools import dropwhiledef is_less_than_5(n):return n < 5nums = [1, 3, 5, 2, 4, 6]
filtered_nums_2 = dropwhile(is_less_than_5, nums)
print(list(filtered_nums_2))
因为谓词函数第一次返回元素 5,所以我们得到从 5 开始的序列的所有元素:is_less_than_5False
Output >>> [5, 2, 4, 6]
4. islice
您已经熟悉对 Python 可迭代对象(如列表、元组和字符串)进行切片。切片采用语法:。iterable[start:stop:step]
但是,这种切片方法具有以下缺点:
- 处理大型序列时,每个切片或子序列都是占用内存的副本。这可能效率低下。
- 由于步骤也可以采用负值,因此使用开始值、停止值和步骤值会影响可读性。
该函数解决了上述限制:islice
- 它返回一个迭代器。
- 它不允许该步骤为负值。
您可以像这样使用该函数:islice
from itertools import islice
islice(seq,start,stop,step)
以下是使用该函数的几种不同方式:islice
- Using 返回切片上的迭代器,,..., .
islice(seq, stop)seq[0]seq[1]seq[stop - 1] - 如果指定开始值和停止值:该函数在切片上返回一个迭代器,,..., .
islice(seq, start, stop)seq[start]seq[start + 1]seq[start + stop - 1] - 指定开始、停止和步进参数时,该函数将返回切片、、,..., .这样<和>= .
seq[start]seq[start + step]seq[start + 2*step]seq[start + k*step]start + k*stepstopstart + (k+1)*stepstop
让我们举一个示例列表来更好地理解这一点:
nums = list(range(10)) #[0,1, 2, 3, 4, 5, 6, 7, 8, 9]
现在让我们将该函数与我们学到的语法一起使用。islice
仅使用停止值
让我们只指定停止索引:
from itertools import islice# only stop
sliced_nums = islice(nums, 5)
print(list(sliced_nums))
这是输出:
Output >>> [0, 1, 2, 3, 4]
使用开始值和停止值
在这里,我们同时使用开始值和停止值:
# start and stop
sliced_nums = islice(nums, 2, 7)
print(list(sliced_nums))
切片从索引 2 开始,一直延伸到但不包括索引 7:
Output >>> [2, 3, 4, 5, 6]
使用开始值、停止值和步长值
当我们使用开始值、停止值和步长值时:
# using start, stop, and step
sliced_nums = islice(nums, 2, 8, 2)
print(list(sliced_nums))
我们得到一个从索引 2 开始的切片,一直延伸到但不包括索引 8,步长为 2(每隔一个元素返回一次)。
Output >>> [2, 4, 6]
总结
我希望本教程能帮助您了解迭代工具过滤器函数的基础知识。您已经看到了一些简单的示例,以更好地理解这些函数的工作原理。接下来,您可以了解生成器生成器函数和生成器表达式如何作为高效的 python 迭代器工作。
原文链接:4 个你可能不知道的 Python 迭代工具过滤器函数 (mvrlink.com)
相关文章:
4 个你可能不知道的 Python 迭代工具过滤器函数
推荐:使用 NSDT场景编辑器 快速搭建3D应用场景 当您只想循环遍历迭代器、检索序列中的元素并处理它们时,这些元素特别有用 - 所有这些都无需将它们存储在内存中。今天我们将学习如何使用以下四个迭代工具过滤器函数: filterfalsetakewhiledr…...
Scrapy简介-快速开始-项目实战-注意事项-踩坑之路
scrapy项目模板地址:https://github.com/w-x-x-w/Spider-Project Scrapy简介 Scrapy是什么? Scrapy是一个健壮的爬虫框架,可以从网站中提取需要的数据。是一个快速、简单、并且可扩展的方法。Scrapy使用了异步网络框架来处理网络通讯&…...
lightdb 支持兼容Oracle的to_clob函数
文章目录 概述案例演示 概述 在信创移植的SQL语句中,有来源于Oracle数据库的SQL语句。 在ORACLE PL/SQL包中,你可以使用TO_CLOB(character)函数将RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB值转换为CLOB。 因此在LightDB 23.3版本中实现了…...
ES6中let和const关键字与var关键字之间的区别?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量作用域(Scope):⭐ 变量提升(Hoisting):⭐ 重复声明:⭐ 初始化:⭐ 全局对象属性:⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#…...
Python中的异常处理3-1
Python中的异常指的是语法上没有错误,但是代码执行时会导致错误的情况。 1 抛出异常 在图1所示的代码中,要求用户输入一个数字,该代码在语法上没有错误。 图1 出现异常的代码 但是运行该代码之后,如果用户输入的是数字…...
大数据与AI:解析智慧城市的幕后英雄
文章目录 1. 智慧城市的定义与发展2. 大数据:智慧城市的基石2.1 大数据的概念与重要性2.2 大数据的应用案例2.2.1 智能交通管理2.2.2 能源效率优化2.2.3 城市规划与土地利用 3. 人工智能:智慧城市的大脑3.1 人工智能的概念与重要性3.2 人工智能的应用案例…...
将钉钉机器人小程序从一个公司迁移至另一个公司的步骤
引言: 由于我们以前开发的钉钉小程序都在一个公司,想在想应用到另一个公司,这就牵扯出了关于钉钉小程序迁移方面的具体步骤。下面是具体步骤: 1、创建一个钉钉小程序 在这一步你需要有钉钉开放平台的开发者权限,具体…...
j解决Ubuntu无法安装pycairo和PyGObject
环境:虚拟机Ubuntu20.04,vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04,vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp,选择Python3.8.10的环境,自动激活Python 最近在搞无人…...
PBI 背景全屏规律呈现水印
想要在Power BI报表中实现全屏规律呈现斜角水印的效果,并且显示的值是用户登录的email的话,目前Power BI desktop的背景“Background”功能中暂时没有支持的直接设置方法。但是基于测试和研究,Power BI市场中有一个叫“HTML Content”的custom visual提供,它支持嵌入一些HT…...
2023年全国职业院校技能大赛信息安全管理与评估网络安全事件响应、数字取证调查、应用程序安全任务书
全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块二 网络安全事件响应、数字取证调查、应用程序安全 比赛时间及注意事项 本阶段比赛时长为180分钟,时间为13:30-16:30。 【注意事项】 比赛结束,不得关机;选手首先需要…...
浙大陈越何钦铭数据结构08-图7 公路村村通【循环和最小堆版】
题目 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N)…...
Linux 部署1Panel现代化运维管理面板远程访问
文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…...
用百度云怎么重装电脑系统
用百度云怎么重装电脑系统 随着云计算技术的飞速发展,百度云成为了人们日常生活中不可或缺的一部分。百度云不仅提供了强大的文件存储和传输功能,还可以帮助人们轻松地重装电脑系统。下面就让我们来介绍一下如何用百度云重装电脑系统。 步骤一…...
SpringCloud环境搭建及入门案例
技术选型: Maven 3.8.4SpringBoot 2.7.8SpringCloud 2021.0.4SpringCloudAlibaba 2022.0.1.0Nacos 2.1.1Sentinel 1.8.5 模块设计: 父工程:SpringCloudAlibaba订单微服:order-service库存微服:stock-service 1.创建…...
什么是序列化和反序列化?
JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是两种常用的数据交换格式,用于在不同系统之间传输和存储数据。 JSON是一种轻量级的数据交换格式,它使用易于理解的键值对的形式表示数…...
React 消息文本循环展示
需求 页面上有个小喇叭,循环展示消息内容 逻辑思路 设置定时器,修改translateX属性来实现滚动,判断滚动位置,修改list位置来实现无限滚动 实现效果 代码 /** Author: Do not edit* Date: 2023-09-07 11:11:45* LastEditors: …...
java获取jenkins发布版本信息
一.需求: 系统cicd发布时首页需要展示jenkins发布的版本和优化内容 二.思路: 1.jenkins创建用户和秘钥 2.找到对应构建任务信息的api 3.RestTemplate发起http请求 三.实现: 1.创建用户和token 2.查找jenkins API 创建 Job POST http://localhost…...
java八股文面试[数据库]——可重复读怎么实现的(MVCC)
可重复读(repeatable read)定义: 一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。 MVCC MVCC,多版本并发控制, 用于实现读已提交和可重复读隔离级别。 MVCC的核心就是 Undo log多版本链 …...
cl 和 “clangtidy“分别是什么?是同一样东西吗?
作者:gentle_zhou 原文链接:cl 和 "clangtidy"分别是什么?是同一样东西吗?-云社区-华为云 先说结论:这两个是不同的工具,cl是编译器,clangtidy是代码检查工具,它们不是一…...
ubuntu22.04开机自启动Eureka服务
ubuntu22.04开机自启动Eureka服务 1、创建启动脚本eurekaService.sh #我们把启动脚本放在/usr/software目录下 cd /usr/software vim eurekaService.sheurekaService.sh内容为 #!/bin/sh # this is a eurekaService shell to startup at the mechian power on.echo "eu…...
米尔RK3576开发板评测:工业AI与边缘计算的性能甜点方案
1. 项目概述:当RK3576遇上米尔开发板,工业AI的新选择最近在嵌入式圈子里,瑞芯微的RK3576这颗SoC讨论热度挺高。作为一枚常年混迹在工控、边缘计算和AIoT项目里的老工程师,我对这类新平台的发布总是格外敏感。米尔电子作为国内老牌…...
电子行业市场机会识别与产品落地实战指南
1. 市场机会的本质:从“风口”到“价值锚点”的认知重塑“市场机会”这四个字,在电子行业里听得耳朵都快起茧了。从投资人到创业者,从工程师到销售,人人都在谈论它。但说实话,很多人对这个词的理解,还停留在…...
ElevenLabs泰米尔文语音API调用性能突降?紧急修复方案:更换Region为ap-southeast-1后P95延迟从2.4s降至380ms(附curl压测脚本)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs泰米尔文语音API性能突降事件全貌 2024年9月中旬起,多位集成ElevenLabs泰米尔文(ta-IN)语音合成服务的开发者报告异常延迟与高失败率——典型请求响应时间…...
阿里Qwen3.6系列实测
阿里Qwen3.6系列实测|1M上下文封神!企业香爆,个人用官方举步维艰AI圈彻底沸腾!阿里Qwen3.6系列甩出王炸——Plus/Flash支持1MToken超大上下文,思维链推理、全栈编程、多模态理解拉满,企业级生产力怪兽实锤&…...
深入解析Safe智能合约钱包:架构、安全与开发实践
1. 项目概述:一个面向未来的智能合约钱包架构如果你在Web3领域待过一段时间,尤其是深度参与过以太坊生态的DApp开发或资产管理,那么你一定对“钱包”这个入口工具有着复杂的感情。一方面,它是我们通往链上世界的钥匙;另…...
第一章-09-相应类型-HTML格式
1.响应类型设置方式2.装饰器中指定响应类3.响应 HTML 格式设置响应类为 HTMLResponse,当前接口即可返回 HTML 内容...
DMA+PWM驱动SK6812 RGB灯带:从时序解析到STM32高效实现
1. SK6812灯带时序解析:为什么PWMDMA是绝配 第一次接触SK6812这类智能RGB灯带时,我被它的控制方式惊艳到了——只需要一根数据线就能串联控制数百个灯珠。但真正动手实现时,才发现时序控制才是真正的挑战。SK6812的通信协议本质上是通过特定时…...
5分钟掌握Sketch Measure:设计师必备的设计标注神器完整指南
5分钟掌握Sketch Measure:设计师必备的设计标注神器完整指南 【免费下载链接】sketch-measure Make it a fun to create spec for developers and teammates 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-measure 还在为设计稿标注而烦恼吗ÿ…...
深度实战:在Linux系统上免费运行Adobe Illustrator CC的高效开源方案
深度实战:在Linux系统上免费运行Adobe Illustrator CC的高效开源方案 【免费下载链接】illustratorCClinux Illustrator CC v17 installer for Gnu/Linux 项目地址: https://gitcode.com/gh_mirrors/il/illustratorCClinux 对于Linux用户而言,专业…...
Android跨平台文件同步技术实现:WebDAV桥接工具架构深度解析
Android跨平台文件同步技术实现:WebDAV桥接工具架构深度解析 【免费下载链接】webdav-provider An Android app that can expose WebDAV storage to other apps through Androids Storage Access Framework (SAF) 项目地址: https://gitcode.com/gh_mirrors/we/we…...
