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

列表推导式详解与实战应用

Python推导式全面详解一、推导式概述Python推导式Comprehension是一种简洁、高效的语法结构用于从一个可迭代对象快速创建新的数据结构。推导式不仅使代码更加简洁易读还能提高代码执行效率。Python支持四种主要的推导式列表推导式、字典推导式、集合推导式和生成器推导式通常称为生成器表达式。推导式的基本优势代码简洁性用一行代码替代多行循环执行效率通常比传统循环更快可读性直观表达数据转换逻辑内存优化生成器推导式支持惰性求值二、列表推导式基本语法结构[expression for item in iterable if condition]基础用法示例# 传统方式创建平方数列表 squares_old [] for i in range(1, 6): squares_old.append(i ** 2) # 使用列表推导式 squares [i ** 2 for i in range(1, 6)] print(squares) # 输出: [1, 4, 9, 16, 25]带条件过滤的列表推导式# 筛选偶数并计算平方 even_squares [i ** 2 for i in range(10) if i % 2 0] print(even_squares) # 输出: [0, 4, 16, 36, 64] # 筛选字符串长度大于3的单词 words [apple, cat, banana, dog, elephant] long_words [word.upper() for word in words if len(word) 3] print(long_words) # 输出: [APPLE, BANANA, ELEPHANT]多重循环的列表推导式# 生成坐标点 coordinates [(x, y) for x in range(3) for y in range(2)] print(coordinates) # 输出: [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)] # 矩阵转置示例 matrix [[1, 2, 3], [4, 5, 6], [7, 8, 9]] transposed [[row[i] for row in matrix] for i in range(3)] print(transposed) # 输出: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]三、字典推导式基本语法结构{key_expression: value_expression for item in iterable if condition}基础字典推导式示例# 创建数字与其平方的字典 squares_dict {x: x**2 for x in range(1, 6)} print(squares_dict) # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25} # 转换列表为字典 fruits [apple, banana, cherry] fruit_dict {fruit: len(fruit) for fruit in fruits} print(fruit_dict) # 输出: {apple: 5, banana: 6, cherry: 6}带条件过滤的字典推导式# 筛选值大于10的项 original_dict {a: 5, b: 15, c: 8, d: 20} filtered_dict {k: v for k, v in original_dict.items() if v 10} print(filtered_dict) # 输出: {b: 15, d: 20} # 键值交换并过滤 inverted_dict {v: k for k, v in original_dict.items() if v % 2 0} print(inverted_dict) # 输出: {8: c, 20: d}使用zip函数的字典推导式# 合并两个列表为字典 keys [name, age, city] values [Alice, 25, New York] person_dict {k: v for k, v in zip(keys, values)} print(person_dict) # 输出: {name: Alice, age: 25, city: New York}四、集合推导式基本语法结构{expression for item in iterable if condition}基础集合推导式示例# 创建唯一平方数的集合 unique_squares {x**2 for x in [1, 2, 2, 3, 3, 3, 4]} print(unique_squares) # 输出: {16, 1, 4, 9} # 从字符串中提取唯一字符 text hello world unique_chars {char for char in text if char ! } print(unique_chars) # 输出: {h, e, l, o, w, r, d}带条件过滤的集合推导式# 筛选长度大于3的单词 words {apple, cat, banana, dog, elephant} long_words_set {word for word in words if len(word) 3} print(long_words_set) # 输出: {banana, apple, elephant} # 数学运算后的集合 numbers {1, 2, 3, 4, 5} doubled_evens {x*2 for x in numbers if x % 2 0} print(doubled_evens) # 输出: {4, 8}五、生成器推导式基本语法结构(expression for item in iterable if condition)生成器推导式示例# 创建生成器推导式 squares_gen (x**2 for x in range(1, 6)) print(squares_gen) # 输出: generator object genexpr at 0x... # 使用生成器 for square in squares_gen: print(square, end ) # 输出: 1 4 9 16 25 # 带条件的生成器 even_squares_gen (x**2 for x in range(10) if x % 2 0) print(list(even_squares_gen)) # 输出: [0, 4, 16, 36, 64]生成器的内存优势# 处理大数据集时的内存对比 import sys # 列表推导式 - 立即计算所有结果 big_list [x**2 for x in range(1000000)] print(f列表内存占用: {sys.getsizeof(big_list)} 字节) # 较大内存占用 # 生成器推导式 - 惰性计算 big_gen (x**2 for x in range(1000000)) print(f生成器内存占用: {sys.getsizeof(big_gen)} 字节) # 较小内存占用六、元组推导式注意Python中没有真正的元组推导式语法但可以使用生成器推导式配合tuple()函数实现类似功能。# 使用生成器推导式创建元组 squares_tuple tuple(x**2 for x in range(1, 6)) print(squares_tuple) # 输出: (1, 4, 9, 16, 25) # 带条件的元组推导式 even_tuple tuple(x for x in range(10) if x % 2 0) print(even_tuple) # 输出: (0, 2, 4, 6, 8)七、复杂推导式应用嵌套推导式# 创建二维列表 matrix_2d [[i*j for j in range(1, 4)] for i in range(1, 4)] print(matrix_2d) # 输出: [[1, 2, 3], [2, 4, 6], [3, 6, 9]] # 展平嵌套列表 nested_list [[1, 2, 3], [4, 5], [6, 7, 8, 9]] flattened [item for sublist in nested_list for item in sublist] print(flattened) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]推导式中的三元表达式# 使用三元运算符的推导式 numbers [1, -2, 3, -4, 5] absolute_values [x if x 0 else -x for x in numbers] print(absolute_values) # 输出: [1, 2, 3, 4, 5] # 字典推导式中的复杂逻辑 scores {Alice: 85, Bob: 92, Charlie: 78, Diana: 95} grade_dict {name: A if score 90 else B if score 80 else C for name, score in scores.items()} print(grade_dict) # 输出: {Alice: B, Bob: A, Charlie: C, Diana: A}八、推导式性能对比执行效率比较import time # 传统for循环 start_time time.time() result_old [] for i in range(1000000): if i % 2 0: result_old.append(i**2) end_time time.time() print(f传统循环耗时: {end_time - start_time:.4f}秒) # 列表推导式 start_time time.time() result_new [i**2 for i in range(1000000) if i % 2 0] end_time time.time() print(f推导式耗时: {end_time - start_time:.4f}秒)九、最佳实践与注意事项推导式使用建议场景推荐推导式类型说明需要有序数据列表推导式保持元素顺序需要键值对字典推导式快速构建映射关系需要去重集合推导式自动去除重复元素大数据处理生成器推导式节省内存惰性求值复杂逻辑传统循环可读性更好常见注意事项避免过度复杂当推导式变得难以理解时应考虑使用传统循环注意变量作用域推导式中的变量会泄漏到外部作用域内存考虑列表推导式会立即创建完整列表可能消耗大量内存错误处理推导式中难以添加异常处理逻辑通过掌握这些推导式的使用方法你可以编写出更加简洁、高效的Python代码显著提升开发效率和代码质量。参考来源python列表推导式、字典推导式、集合推导式【Python】推导式列表推导式、元组推导式、字典推导式、集合推导式详解【技能树共建】Python 列表推导式列表推导式与字典推导式滚雪球学 PythonPYTHON-列表推导式python 列表推导式、元组推导式 字典推导式 、三元运算符

相关文章:

列表推导式详解与实战应用

Python推导式全面详解 一、推导式概述 Python推导式(Comprehension)是一种简洁、高效的语法结构,用于从一个可迭代对象快速创建新的数据结构。推导式不仅使代码更加简洁易读,还能提高代码执行效率。Python支持四种主要的推导式&…...

Django个人主页网站搭建全指南

一、环境准备(必做) 1. 检查 Python 环境 运行 # 检查Python版本(建议3.8) python --version # 安装Django pip install django4.2.10 # 稳定版本,避免兼容性问题2. 项目目录结构(最终效果)…...

56. 合并区间(中等)

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。示例 1:输入:intervals [[1,3],[…...

Picsart推出智能体市场,创作者可“雇佣“AI助手

AI驱动的设计平台Picsart正式推出智能体市场,允许创作者"雇佣"AI助手来协助完成特定任务,比如调整和重新混合社交内容,或编辑Shopify上的产品照片。Picsart在全球拥有超过1.3亿用户,主要面向Z世代群体,可以看…...

Amazon Bedrock 推理成本实战优化:四个定价套餐怎么选?批量推理省 50%、提示缓存省 90% 的具体操作

Amazon Bedrock 推理成本实战优化:四个定价套餐怎么选?批量推理叡 50%、提示缓存省 90% 的具体操作 大模型推理的账单越来越厚,这可能是很多团队面临的现实问题。 我们团队在 Amazon Bedrock 上跑了几个月的推理任务,从标准按需模…...

基于springboot青少年心理健康教育培训系统小程序设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

ESP32-WIFI开发技术:时间矫正及天气显示

本文为机器人设计与应用综合实训中,基于ESP32的开发技术分享帖,主要记录实训过程中的ESP32开发要点、问题排查及实践总结,结合ESP32S3点亮LCD实训需求完成内容填写,适配实训报告补充、技术复盘及同学间交流使用。核心方向&#xf…...

AI驱动Web自动化测试:Ollama+Qwen+OpenClaw+Python实战指南

一、方案简介 传统Web自动化测试依赖Selenium/Playwright编写大量定位代码,维护成本高、上手门槛大。本文介绍Ollama+Qwen+OpenClaw+Python的AI驱动方案:用自然语言描述测试用例,Qwen解析指令,OpenClaw控制浏览器执行,Python串联流程并生成报告,实现零代码定位、异常自动…...

day 01

一、基本元器件1、电阻电阻的大小由导体 的材料、长度、横截面积和温度共同决定。1.1相关计算公式导体的电阻R可通过以下公式计算:Rρ.L/Aρ:电阻率(材料特性,单位Ωm) l:导体长度(单位m&#x…...

python-flask超市库存退货管理系统的设计与实现

目录需求分析技术选型数据库设计功能模块开发测试与部署迭代优化项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析 明确超市库存退货管理系统的核心功能需求,包括商品信息管理、退货…...

Microsoft发布.NET 11 Preview 2,带来更清晰的堆栈跟踪

微软发布了其计划中的.NET 11软件开发平台的Preview 2版本,该版本在本地运行时异步处理、Linux和macOS系统的SDK安装包缩小等方面取得了显著进展。.NET 11 Preview 2于3月10日发布,可从net.microsoft.com下载。Preview 2是继2月10日发布Preview 1之后的版…...

TCP/IP 协议基础课程课后总结

今天的《TCP/IP 协议基础》课程已圆满结束,课程围绕网络分层模型、IP 网络层核心协议、传输层 TCP 与 UDP 协议、上层协议标识体系四大核心模块展开系统讲解,从 OSI 参考模型的分层设计思想,到 TCP/IP 协议栈各层核心协议的工作原理、报文结构…...

Day2 java的基础语法

1.注释注释是自己或别人观看的笔记,代码运行时会忽略,核心作用是让代码更容易懂2.关键字关键字是 Java提前定好、有特殊含义的小写单词,相当于代码的 “固定指令”核心:不能把关键字当变量名、类名用3.字面量字面量是直接写在代码…...

挖洞必看!40 个漏洞挖掘姿势吐血整理,小白也能快速挖到洞

各位靓仔,搞网络安全,就像在雷区蹦迪,一不小心就 Boom Shakalaka!Web漏洞这玩意儿,说白了就是信任危机 验证掉链子。开发者们啊,总是对用户输入、权限边界和系统交互爱的太深,结果翻车了&#…...

全息医疗诊断测试:医生在空中操作器官模型的精度验证

一、全息技术概述及其在医疗诊断中的应用全息技术利用激光干涉和衍射原理,记录并重现物体的三维图像,使观察者能从多角度感知立体结构,类似于现实中的物理对象。这种技术基于波前存储和重建,能同时捕获物体的振幅、相位和波长信息…...

基础 语法

注释解释位置的说明性信息单行注释:ctrl /,注释光标所在行或选中行多行注释:/* Enter关键字被java赋予特殊含义的英文单词关键字已经被 Java 赋予了特殊的含义,我们无法使用 (不能当作类名,变量名&#x…...

别再花冤枉钱了!强推10款国内免费降AI神器,一键破解论文AIGC难题(附传送门)

说大实话,现在写论文最让人头疼的不是查重,而是那个红通通的AIGC检测报告。 很多同学熬夜写完,一测全是疑似AI。为了帮大家解决这个降低ai的难题,我把市面上的工具翻了个底朝天。虽然网上打着免费降ai率工具旗号的不少&#xff0c…...

Autodesk Maya

链接:https://pan.quark.cn/s/36580a067803(玛雅)是一款全球著名的三维动画软件,建模软件,仿真和渲染软件.MAYA软件玛雅动画在广告传媒,影视行业,工业设计,建筑设计,三维动画,多媒体制作,游戏开发,辅助教学及工程可视化等领域广泛应用.更新日志help.autodesk.com/vi…...

图像处理原理

本文以显示本地图片为例,讲解图像处理的基本原理。 要导入本地图片,需要使用IO(输入/输出)接口。通过IO接口可以实现外部数据与程序内存之间的数据传输。我们将使用javax.imageio包中的ImageIO工具类来完成这一操作。首先需要创建…...

论文降AIGC太难?这10个国内免费降AI工具一键搞定降重(附全套传送门)

说大实话,现在写论文最让人头疼的不是查重,而是那个红通通的AIGC检测报告。 很多同学熬夜写完,一测全是疑似AI。为了帮大家解决这个降低ai的难题,我把市面上的工具翻了个底朝天。虽然网上打着免费降ai率工具旗号的不少&#xff0c…...

TPC标准基准测试:如何评估并建立TDengine时序数据库的性能基线

在企业决定引入或升级 database 系统时,“拍脑袋”式的技术选型往往埋下巨大的隐患。在复杂的生产环境中,数据库的真实性能往往受到硬件配置、网络拓扑、应用模型等无数变量的干扰。因此,如何科学地评估系统上限并建立可靠的性能预期&#xf…...

论文AI率飙高?这10款降AI率工具亲测有效,轻松搞定论文检测!

论文AI率飙高?这10款降AI率工具亲测有效,轻松搞定论文检测! 谁懂啊!论文用AI写被知网标红真的会谢,熬夜改到三点AI率还居高不下的崩溃,我刚踩完坑!为了帮大家避开雷区,我把市面上主流…...

RAG核心技术全解析:Embedding选型、面试高频问题与Rerank重排序原理

1. 引言 随着大语言模型(LLM)在各行业的深入应用,一个核心问题逐渐凸显:模型的参数化知识存在时效性局限,且无法直接访问企业私有数据。检索增强生成(Retrieval-Augmented Generation, RAG)技术…...

【苍穹外卖|项目日记】 第二天

前言: 今天学习了使用yapi设计接口,swagger测试接口,并完成了苍穹外卖员工管理的部分 目录 前言: 今日完结任务: 今日收获: 1. 学会了使用swagger查看和测试接口 2. 完成新增员工业务代码开发 3.完成员…...

基于springboot的作业批改系统设计与实现 毕业设计源码+论文+PPT

阅读提示 博主是一位拥有多年毕设经验的技术人员,如果本选题不适用于您的专业或者已选题目,我们同样支持按需求定做项目,论文全套!!! 博主介绍 CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者…...

MATLAB与CST联合仿真:快速建模超表面阵列,涡旋波生成与雷达散射优化

MATLAB联合CST进行仿真。 只需要写一个Excel,里面放你的编码序列,然后用MATLAB导入编码序列,或者你需要的超表面的排列方式。 就能够在CST里面自动生成对应的超表面阵列。 主要是针对单元个数太多,手动建模麻烦等问题。 能够用到涡…...

python-flask厨房达人美食菜谱分享平台_in9c2

目录技术栈选择核心功能模块数据库设计项目结构关键实现步骤部署方案扩展功能路线图项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 使用Python Flask作为后端框架,搭配Jinja2模…...

洛谷p1046:用一个题练习排序+二分查找

以上是题目要求,虽然数据量很少我们可以直接用一个count变量记录然后循环10次挨着比大小。但是不难发现这个题完全可以先对数组排序随后找到第一个大于能触及的最大高度的值的所在下标(下标从0开始则下标为i代表前面有i个数)。因此我们可以使…...

答应我,不要再说自己不了解Spring源码的整体设计和实现细节了

Spring是我们Java程序员面试和工作都绕不开的重难点。很多粉丝就经常跟我反馈说由Spring衍生出来的一系列框架太多了,根本不知道从何下手;大家学习过程中大都不成体系,但面试的时候都上升到源码级别了,你不光要清楚了解Spring源码…...

揭秘RAG落地神器:OpenRAG快速构建智能知识库(干货满满),从零基础到实战,收藏这一篇就够了!

在人工智能浪潮中,大语言模型(LLM)展现出的惊人理解和生成能力令人印象深刻。然而,一个核心痛点也随之浮现:模型的知识存在滞后性,并且难以处理大量、特定、非结构化的私人或企业文档。这时,RAG…...