【Python Cookbook】S01E13 筛选序列中的元素

目录

  • 问题
  • 解决方案
  • 讨论

问题

序列中包含一些数据,我们需要提取出其中的值或根据某些标准对序列做删减。

解决方案

要筛选序列中的元素,通常最简单的办法是通过 列表推导式,例如:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]print([n for n in mylist if n > 0])
print([m for m in mylist if m <= 0])

但是列表推导式存在着一些缺点,比如相对可读性差,比如其会一次性生成整个列表,在生成非常大的列表时,会导致消耗大量内存。

相比之下,生成器表达式 可以更加有效地使用内存,因为其会逐个产生元素而不是一次性生成整个列表。

pos = (n for n in mylist if n > 0)
print(pos)
for x in pos:print(x)

有时候,如果筛选条件过于复杂,就不宜使用列表推导式以及生成器表达式。这时,我们可以选择将筛选逻辑代码放在单独的函数中,然后使用内建的 filter() 函数处理。

values = ['1', '2', '-3', '-', '4', 'N/A', '5']def is_int(val):try:x = int(val)return Trueexcept ValueError:return Falseisvals = list(filter(is_int, values))
print(isvals)

filter() 创建了一个迭代器,而我们想要筛选得到列表中所有整数,且以列表的形式展示,所以加上 list()

讨论

列表推导式以及生成器表达式通常是用来筛选数据的最简单和最直接的方式。其功能强大,具备同时对数据进行转换的能力:

mylist = [1, 4, -5, 10, -7, 2, 3, -1]import math
print([math.sqrt(n) for n in mylist if n > 0])

此外,列表推导式以及生成器表达式也可以实现同时对不满足条件的字段做标注,比如标注出不满足 >=0 的条件的值,其余值取平方根:

mylist = [1, 4, -5, 16, -7, -9, 25, 36]import math
print([math.sqrt(n) if n > 0 else -1 for n in mylist])

结果:

[1.0, 2.0, -1, 4.0, -1, -1, 5.0, 6.0]

此外,除了列表推导式以及生成器表达式,python 还提供一种筛选工具:itertools.compress(),其接受一个可迭代对象以及一个布尔选择器序列作为输入。输出时,会给出所有在相应的布尔选择器中为 True 的可迭代对象元素。

address = ['5412 N CLARK','5149 N CLARK','5800 E 58TH','2122 N CLARK','5645 N RAVESWOOD','1060 W ADDISON','4901 N BROADWAY','1039 W GRANVILLE'
]counts = [0, 3, 10, 4, 1, 7, 6, 1]from itertools import compress
more5 = [n > 5 for n in counts]
print(list(compress(address, more5)))
['5800 E 58TH', '1060 W ADDISON', '4901 N BROADWAY']

filter() 函数一样,compress() 同样会返回一个迭代器,我们需要通过 list() 将其结果转换为列表。

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

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

相关文章

JAVAEE之文件IO_数据流概念,字节流:InputStream、OutputStream,字符流:reader、writer,及实例代码

什么是数据流 顾名思义&#xff0c;I 表示input&#xff0c;O 表示output&#xff0c;也就是输入输出流&#xff0c;主要是在程序与文件之间&#xff0c;用于传输数据的通道。既然要传输数据&#xff0c;那么我们需要理解文件和程序之间哪种方向的传输是输入流&#xff0c;哪种…

SD-WAN供应商的类型及选择指南

在企业加速数字化转型的背景下&#xff0c;SD-WAN技术成为优化网络性能和提升连接效率的重要方案&#xff0c;受到了广泛关注。本文将介绍当前主要的SD-WAN供应商类型及其特点&#xff0c;并提供企业选择合适供应商的建议。 目前&#xff0c;市场上的SD-WAN供应商主要分为两类&…

操作系统(3) 处理机调度

目录 一、处理机调度概述 1.基本准则 &#xff08;1&#xff09;CPU利用率 &#xff08;2&#xff09;系统吞吐量 &#xff08;3&#xff09;周转时间 &#xff08;4&#xff09;等待时间 &#xff08;5&#xff09;响应时间 2.进程调度方式 &#xff08;1&#xff0…

现代密码学-数字签名

从消息认证码到数字签名 前面讲到&#xff0c;消息认证码无法防止否认&#xff0c;A,B之间共享密钥计算出MAC,A,B都能计算出MAC,对于第三方C来说&#xff0c;他无法证明这个MAC是A计算的还是B计算的。 通过数字签名解决问题。 A,B各自使用不同的密钥-公钥密码&#xff0c;A用…

LeetCode刷题之HOT100之组合总和

2024/6/3 周一&#xff0c;工作日的第一天。昨晚梦到被导师说去实验室不积极哈哈哈&#xff0c;风扇开到二级&#xff0c;早上被吹醒。买的书马上快要到了。上午刚来准备刷题&#xff0c;结果去搞了一下数据库sql&#xff0c;做的差不多了&#xff0c;还差点格式转换就差不多出…

springboot打包笔记

文章目录 多配置文件application.yml本地启动参数替换profiles&#xff0c;还是要复制文件 项目有各种环境&#xff0c;例如&#xff1a;local&#xff0c;uat&#xff0c;prd等。 各种打包方式一定要熟练掌握。 做此笔记是因为做了那么多项目&#xff0c;也打了很多包&#xf…

QT中如何对引入的第三方库进行翻译

1、背景 在我们的程序中,可能会加载其他人写的模块,,该模块是以库的形式提供的,那么我们程序翻译时,如何来对引入的第三方库进行翻译??? 2、方案 首先,第三方库会有自己的翻译文件,并且一般要给我们提供设置翻译的接口, 例如下:第三方库给我们暴露一个接口,我们…

军用电源性能测试有哪些测试项目?需要遵循什么标准?

为了确保军用电源在极端条件下能够正常工作&#xff0c;必须对其进行一系列严格的性能测试。这些测试不仅包括效率、电压调整率和负载调整率等基本参数的测试&#xff0c;还包括动态响应能力、绝缘电阻、耐压测试、温度系数以及高低温循环等综合性能的评估。 测试项目 效率 电压…

spring 优雅替换bean

方案一&#xff1a;使用 Primary/Qualifier 注解&#xff08;优选&#xff09; 如果有多个相同类型的 Bean 存在&#xff0c;可以将想要优先使用的 Bean 加上 Primary 注解。 Qualifier和Primary注解的区别&#xff1a;Primary注解用于标记具有相同类型的多个实例中的主要实例…

MySQL -- 连接查询

MySQL使用连接查询&#xff08;JOIN&#xff09;是为了从多个相关表中获取数据。连接查询是一种强大且常用的操作&#xff0c;可以根据某些条件将两张或多张表中的数据组合在一起&#xff0c;返回一个联合结果集。 1.为什么使用连接查询 数据规范化&#xff1a; 数据库设计时通…

站点被篡改快照被劫持解决服务方法教程_一招制敌

站点被篡改快照被劫持解决服务方法教程_一招制敌 被篡改表现形式&#xff1a; 站点打不开或跳转到别的网站。 攻击者目的&#xff1a; 报复、勒索、卖防御产品&#xff08;如DDOS防御产品&#xff09;。 攻击成本&#xff1a; 工具&#xff08;如VPN购买&#xff09;成本、人…

智能工厂生产设备实时监控技术的UI设计

智能工厂生产设备实时监控技术的UI设计

Flutter的Dart语法入门

文章目录 前言1. 类型声明2. 数据类型2.1 基本数据类型常量 2.2 String2.3 集合2.4 unicode 3. Dart函数特征3.1 可变参数列表和默认入参3.2 匿名函数3.3 typedef 4. Dart面向对象4.1 构造函数4.2 访问权限4.3 类的继承 参考资料附录 前言 每个语言都有控制流语句就不写测试代…

Go 语言的控制结构:条件与循环

Go 语言提供了丰富的控制结构&#xff0c;使得开发者可以编写出具有复杂逻辑的程序。这些控制结构包括用于条件分支的 if-else 和 switch 语句&#xff0c;循环控制的 for 语句&#xff0c;以及用于控制循环执行流的 break 和 continue 关键字。此外&#xff0c;Go 语言还支持 …

约瑟夫游戏(编号+密码)

编号为1、2、3、...、N的N个人按顺时针方向围坐一圈&#xff0c;每人持有一个密码&#xff08;正整数&#xff09;。从指定编号为1的人开始&#xff0c;他的密码为M的初始值&#xff0c;按顺时针方向从1号自己开始顺序报数&#xff0c;报到指定数M时停止报数&#xff0c;报M的人…

i18n-demo

一、demo 1、资源文件准备 resources下放各个语言文件&#xff0c;直接放resources下都行。我新建一个文件夹&#xff0c;

房地产vr全景展示交互视频让购房者更有参与感

在当今房地产市场中&#xff0c;购房者的需求日益多样化和个性化。为满足这一趋势&#xff0c;我们创新性地将VR虚拟现实技术应用于楼盘宣传&#xff0c;为购房者带来前所未有的沉浸式购房体验。 一、地理位置全景展示 通过实景拍摄与VR技术的结合&#xff0c;我们为购房者呈现…

day26-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 1.3 基本用法&#xff1a;&#xff08;掌握&#xff09; 实际开发中单元测试的使用方式&#xff08;掌握&#xff09; public class …

C语言,排序

前言 排序&#xff0c;可以说是数据结构中必不可缺的一环。我们创造数据存储它&#xff0c;要想知道数据之间的联系&#xff0c;比较是必不可少的。不然&#xff0c;费劲心思得来的数据若是不能有更多的意义&#xff0c;那么拿到了又有什么用&#xff1f; 排序是计算机内经常进…

风险投资公司正在帮助小投资者购买Anthropic、OpenAI等热门公司的股票

近年来&#xff0c;风险投资公司对于人工智能&#xff08;AI&#xff09;领域的公司&#xff0c;如Anthropic、Groq、OpenAI等&#xff0c;表现出了极高的投资热情。这些公司因为它们在AI技术方面的创新而备受瞩目。但是&#xff0c;对于很多小投资者来说&#xff0c;由于资金有…