当前位置: 首页 > news >正文

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 迭代工具过滤器函数

推荐&#xff1a;使用 NSDT场景编辑器 快速搭建3D应用场景 当您只想循环遍历迭代器、检索序列中的元素并处理它们时&#xff0c;这些元素特别有用 - 所有这些都无需将它们存储在内存中。今天我们将学习如何使用以下四个迭代工具过滤器函数&#xff1a; filterfalsetakewhiledr…...

Scrapy简介-快速开始-项目实战-注意事项-踩坑之路

scrapy项目模板地址&#xff1a;https://github.com/w-x-x-w/Spider-Project Scrapy简介 Scrapy是什么&#xff1f; Scrapy是一个健壮的爬虫框架&#xff0c;可以从网站中提取需要的数据。是一个快速、简单、并且可扩展的方法。Scrapy使用了异步网络框架来处理网络通讯&…...

lightdb 支持兼容Oracle的to_clob函数

文章目录 概述案例演示 概述 在信创移植的SQL语句中&#xff0c;有来源于Oracle数据库的SQL语句。 在ORACLE PL/SQL包中&#xff0c;你可以使用TO_CLOB(character)函数将RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB值转换为CLOB。 因此在LightDB 23.3版本中实现了…...

ES6中let和const关键字与var关键字之间的区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 变量作用域&#xff08;Scope&#xff09;&#xff1a;⭐ 变量提升&#xff08;Hoisting&#xff09;&#xff1a;⭐ 重复声明&#xff1a;⭐ 初始化&#xff1a;⭐ 全局对象属性&#xff1a;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#…...

Python中的异常处理3-1

Python中的异常指的是语法上没有错误&#xff0c;但是代码执行时会导致错误的情况。 1 抛出异常 在图1所示的代码中&#xff0c;要求用户输入一个数字&#xff0c;该代码在语法上没有错误。 图1 出现异常的代码 但是运行该代码之后&#xff0c;如果用户输入的是数字&#xf…...

大数据与AI:解析智慧城市的幕后英雄

文章目录 1. 智慧城市的定义与发展2. 大数据&#xff1a;智慧城市的基石2.1 大数据的概念与重要性2.2 大数据的应用案例2.2.1 智能交通管理2.2.2 能源效率优化2.2.3 城市规划与土地利用 3. 人工智能&#xff1a;智慧城市的大脑3.1 人工智能的概念与重要性3.2 人工智能的应用案例…...

将钉钉机器人小程序从一个公司迁移至另一个公司的步骤

引言&#xff1a; 由于我们以前开发的钉钉小程序都在一个公司&#xff0c;想在想应用到另一个公司&#xff0c;这就牵扯出了关于钉钉小程序迁移方面的具体步骤。下面是具体步骤&#xff1a; 1、创建一个钉钉小程序 在这一步你需要有钉钉开放平台的开发者权限&#xff0c;具体…...

j解决Ubuntu无法安装pycairo和PyGObject

环境&#xff1a;虚拟机Ubuntu20.04&#xff0c;vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04&#xff0c;vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp&#xff0c;选择Python3.8.10的环境&#xff0c;自动激活Python 最近在搞无人…...

PBI 背景全屏规律呈现水印

想要在Power BI报表中实现全屏规律呈现斜角水印的效果,并且显示的值是用户登录的email的话,目前Power BI desktop的背景“Background”功能中暂时没有支持的直接设置方法。但是基于测试和研究,Power BI市场中有一个叫“HTML Content”的custom visual提供,它支持嵌入一些HT…...

2023年全国职业院校技能大赛信息安全管理与评估网络安全事件响应、数字取证调查、应用程序安全任务书

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 任务书 模块二 网络安全事件响应、数字取证调查、应用程序安全 比赛时间及注意事项 本阶段比赛时长为180分钟&#xff0c;时间为13:30-16:30。 【注意事项】 比赛结束&#xff0c;不得关机&#xff1b;选手首先需要…...

浙大陈越何钦铭数据结构08-图7 公路村村通【循环和最小堆版】

题目 现有村落间道路的统计数据表中&#xff0c;列出了有可能建设成标准公路的若干条道路的成本&#xff0c;求使每个村落都有公路连通所需要的最低成本。 输入格式: 输入数据包括城镇数目正整数N&#xff08;≤1000&#xff09;和候选道路数目M&#xff08;≤3N&#xff09;…...

Linux 部署1Panel现代化运维管理面板远程访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…...

用百度云怎么重装电脑系统

用百度云怎么重装电脑系统 随着云计算技术的飞速发展&#xff0c;百度云成为了人们日常生活中不可或缺的一部分。百度云不仅提供了强大的文件存储和传输功能&#xff0c;还可以帮助人们轻松地重装电脑系统。下面就让我们来介绍一下如何用百度云重装电脑系统。 步骤一&#xf…...

SpringCloud环境搭建及入门案例

技术选型&#xff1a; Maven 3.8.4SpringBoot 2.7.8SpringCloud 2021.0.4SpringCloudAlibaba 2022.0.1.0Nacos 2.1.1Sentinel 1.8.5 模块设计&#xff1a; 父工程&#xff1a;SpringCloudAlibaba订单微服&#xff1a;order-service库存微服&#xff1a;stock-service 1.创建…...

什么是序列化和反序列化?

JSON&#xff08;JavaScript Object Notation&#xff09;和XML&#xff08;eXtensible Markup Language&#xff09;是两种常用的数据交换格式&#xff0c;用于在不同系统之间传输和存储数据。 JSON是一种轻量级的数据交换格式&#xff0c;它使用易于理解的键值对的形式表示数…...

React 消息文本循环展示

需求 页面上有个小喇叭&#xff0c;循环展示消息内容 逻辑思路 设置定时器&#xff0c;修改translateX属性来实现滚动&#xff0c;判断滚动位置&#xff0c;修改list位置来实现无限滚动 实现效果 代码 /** Author: Do not edit* Date: 2023-09-07 11:11:45* LastEditors: …...

java获取jenkins发布版本信息

一.需求&#xff1a; 系统cicd发布时首页需要展示jenkins发布的版本和优化内容 二.思路: 1.jenkins创建用户和秘钥 2.找到对应构建任务信息的api 3.RestTemplate发起http请求 三.实现&#xff1a; 1.创建用户和token 2.查找jenkins API 创建 Job POST http://localhost…...

java八股文面试[数据库]——可重复读怎么实现的(MVCC)

可重复读&#xff08;repeatable read&#xff09;定义&#xff1a; 一个事务执行过程中看到的数据&#xff0c;总是跟这个事务在启动时看到的数据是一致的。 MVCC MVCC&#xff0c;多版本并发控制, 用于实现读已提交和可重复读隔离级别。 MVCC的核心就是 Undo log多版本链 …...

cl 和 “clangtidy“分别是什么?是同一样东西吗?

作者&#xff1a;gentle_zhou 原文链接&#xff1a;cl 和 "clangtidy"分别是什么&#xff1f;是同一样东西吗&#xff1f;-云社区-华为云 先说结论&#xff1a;这两个是不同的工具&#xff0c;cl是编译器&#xff0c;clangtidy是代码检查工具&#xff0c;它们不是一…...

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…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...