Python语法学习之 - 生成器表达式(Generator Expression)
第一次见这样的语法
本人之前一直是Java工程师,最近接触了一个Python项目,第一次看到如下的代码:
i = sum(letter in target_arr for letter in source_arr)
这条语句是计算source 与 target 数组中有几个单词是相同的。
当我第一眼看到这样的写法的时候,我的第一感觉是这样的。
我读书少,见识少,那是真不懂,于是赶紧孤狗一下,想要一探究竟。
原来这叫:生成器表达式
生成器表达式语法
生成器表达式(Generator Expression)是一种简洁高效地创建迭代器(Iterator)的方式。它类似于列表推导式(List Comprehension),但生成器表达式使用圆括号 () 而不是方括号 []。
生成器表达式的语法
(expression for item in iterable if condition)
-
expression:对每个元素进行的操作,生成迭代器中的值。
-
item:迭代变量,表示可迭代对象 iterable 中的每个元素。
-
iterable:可迭代对象,例如列表、元组、字符串等。
-
condition:可选的过滤条件,只有满足条件的元素才会被处理。
生成器表达式的特点 -
惰性求值: 生成器表达式不会一次性计算所有元素,而是按需生成。这样可以节省内存,特别是在处理大量数据时。
-
返回迭代器: 生成器表达式返回一个迭代器对象,可以通过 for 循环或 next() 函数来遍历其中的元素。
-
不可索引: 迭代器不支持索引操作,不能像列表那样通过下标访问元素。
生成器表达式的应用 -
过滤数据:
even_numbers = (x for x in range(10) if x % 2 == 0) # 偶数 -
映射数据:
squares = (x**2 for x in range(5)) # 平方数 -
组合数据:
pairs = ((x, y) for x in [1, 2] for y in [3, 4]) # [(1, 3), (1, 4), (2, 3), (2, 4)] -
传递给函数:
sum(x for x in range(100) if x % 3 == 0) # 3 的倍数之和
生成器表达式 vs. 列表推导式
特点 | 生成器表达式 | 列表推导式 |
---|---|---|
返回值 | 迭代器对象 | 列表 |
惰性求值 | 是 | 否 |
内存占用 | 低 | 高 |
适用场景 | 处理大量数据、只需遍历一次的数据 | 需要多次访问数据、需要索引操作的数据 |
案例分析
回到我们的案例中来,我们根据语法解释对我们文章开始的案例进行拆解。
i = sum(letter in target_arr for letter in source_arr)
(expression for item in iterable if condition)对应关系
语法元素 | 生成器表达式中的元素 | 解释 |
---|---|---|
expression | letter in target_arr | 对于每个 letter,判断它是否存在于target_arr 中,返回布尔值 |
item | letter | 迭代变量,表示 source_arr 中的每个元素 |
iterable | source_arr | 可迭代对象,源字符串数组 |
condition | (无) | 此处没有过滤条件,所有 letter 都会被处理 |
总结
- 生成器表达式会遍历 source_arr 中的每个 letter。
- 对于每个 letter,计算 letter in target_arr,得到一个布尔值(True 或 False)。
- sum 函数将这些布尔值相加,得到匹配的总次数,即 match_score。
注意事项
- 这里没有使用 if condition 部分,表示不对元素进行过滤,所有元素都会参与计算。
- 由于 Python 中 True 被视为 1,False 被视为 0,所以 sum 函数可以直接对布尔值求和。
希望这个详细的语法讲解能帮助您更好地理解生成器表达式的语法和用法!
关注我的公众号
欢迎大家关注、点赞、转发,一起交流软件开发、架构设计、云原生技术。
相关文章:

Python语法学习之 - 生成器表达式(Generator Expression)
第一次见这样的语法 本人之前一直是Java工程师,最近接触了一个Python项目,第一次看到如下的代码: i sum(letter in target_arr for letter in source_arr)这条语句是计算source 与 target 数组中有几个单词是相同的。 当我第一眼看到这样…...

docker所在磁盘空间不足 迁移数据
1.查看原始目录docker info | grep "Docker Root Dir" 一般在/var/lib/docker 2.停止docker service docekr stop 3.移动数据 注意 移动前不要创建docker目录! mv /var/lib/docker /home/docker 4.进入目录查看是否与原始目录相同,确认一…...

15、24年--信息系统管理——管理要点
1、数据管理 数据管理使指通过规划、控制与提供数据和信息资产的职能,包括开发、执行和监督有关数据的计划、策略、方案、项目、流程、方法和程序,以获取、控制、保护、交付和提高数据和信息资产价值。 DCMM定义了数据战略、数据治理、数据架构、数据应用、数据安全、…...

如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?
网站安全性在当今至关重要,Google reCAPTCHA 作为防止垃圾邮件和滥用行为的前线防御系统起着关键作用。reCAPTCHA 站点密钥是确保网站交互由人类驱动的唯一标识符。了解如何找到这个密钥对于网站管理员和开发人员来说至关重要。 什么是 reCAPTCHA 站点密钥 reCAPT…...

安卓分身大师4.6.0解锁会员安卓14可用机型伪装双开多开
需登录解锁会员功能,除了加速进入不能, 其他主要功能都是可以使用,由于验证较多一些功能需要特定操作使用,进行伪装时请不要直接伪装,先生成成功后再进行自定义伪装!链接:https://pan.baidu.com…...

攻防世界-mobile-easy-app详解
序言 这道题网上很多分析,但是分析的都是arm版本的,我选了arm64的来分析,arm64相比arm难度高一些,因为arm64编译器搞了inline优化,看起来略抽象 分析 这道题逻辑很简单,输入flag然后一个check函数验证&a…...

【简单介绍下爬山算法】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...

Android App启动流程和源码详解
前言 之前看了些App启动流程的文章,但是看得很浅显,隔了没多久就忘了,自己抓耳挠腮的终于看完了,看得头疼哦。因为很多是个人理解,大哥们主打一个7分信,2分思考,1分怀疑哈。 主要看的源码是An…...
SQL的多表联查
这里我先附上两张表的数据: Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN 🤝 概念: INNER JOIN(内连接)返回两个表中匹配的记录。如果某条…...

瑞芯微RV1126——人脸识别源码分析
本节内容主要分为3部分,第一部分是流程结构图;第二部分为人脸识别代码流程;第三部分为具体的代码分析。 1.流程结构图 2.人脸识别代码流程 1、人脸数据的初始化: init_all_rockx_face_data();init_face_data();2、创建rtsp会话,这里包括发…...

springboot 两个相同类型的Bean使用@Resouce加载
问题描述 有两个相同类型的Bean 使用Service等注解注入或者Bean注入启动以后报错: qualifying bean of type com.fasterxml.jackson.databind.ObjectMapper available: expected single matching bean but found 2提示有相同的类型两个。 解决 * 每个Bean Resour…...
代码随想录算法跟练 | Day3 | 链表Part1
个人博客主页:http://myblog.nxx.nx.cn 代码GitHub地址:https://github.com/nx-xn2002/Data_Structure.git Day3 203.移除链表元素 题目链接: https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述: 给你一个…...

虚拟化技术[1]之服务器虚拟化
文章目录 虚拟化技术简介数据中心虚拟化 服务器虚拟化服务器虚拟化层次寄居虚拟化裸机虚拟化VMM无法直接捕获特权指令解决方案 服务器虚拟化底层实现CPU虚拟化内存虚拟化I/O设备虚拟化 虚拟机迁移虚拟机动态迁移迁移内容:内存迁移迁移内容:网络资源迁移迁…...

WPF之容器标签之Canvas布局标签
Canvas: 定义一个区域,可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…...

AIGC绘画设计基础-建筑设计应用
一、AI及AIGC 对于AI大家都不陌生,但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身,而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC(Artificial Intelligence Generated Content)&…...
Pinia:状态管理库
Pinia 为vue设计的一个现代化的状态管理库,vue3生态系统中的一个核心组件, 专为利用Vue3的新特性设计,替代Vuex称为Vue应用的状态管理标准,提供了更简洁的API,更好的类型安全,以及易于调试的功能 状态管理 在前端应用开发中,用来集中管理和协调应用程序状态的一种工具.在这…...
Mokito的一些API
Mockito是一个Java单元测试框架,它允许开发者创建和配置模拟对象(mock objects),以便在隔离的环境中测试代码,尤其是当实际对象难以构造或其行为不确定时。下面是一些核心的Mockito API及其使用场景和代码示例。 基础…...

前端已死? Bootstrap--CSS组件
目录 Bootstrap 下载 Bootstrap--全局CSS样式 栅格系统 栅格参数 正常显示 实例 代码演示: 排版 代码演示 表格 代码演示 表单 代码演示 等等...(文档很清晰了) Bootstrap--组件 结合演示:(页面) Bootstrap Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HT…...

codewars check_same_case 题解
题目 编写一个函数来检查两个给定的字符是否大小写相同。 如果任何字符不是字母,则返回-1如果两个字符大小写相同,则返回1如果两个字符都是字母且大小写不同,则返回0 例子 a并g返回1A并C返回1b并G返回0B并g返回00并?返回-1题解 1 此题主…...

【Text2SQL 经典模型】X-SQL
论文:X-SQL: reinforce schema representation with context ⭐⭐⭐⭐ Microsoft, arXiv:1908.08113 X-SQL 与 SQLova 类似,使用 BERT style 的 PLM 来获得 representation,只是融合 NL question 和 table schema 的信息的方式不太一样&#…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...