Python列表推导式与字典推导式教程_简化代码高效写法


列表推导式和字典推导式是Python中提升代码简洁性与可读性的核心技巧,用一行表达式替代多行循环+条件判断,语法分别为[表达式 for 变量 in 可迭代对象 if 条件]和{键: 值 for 变量 in 可迭代对象 if 条件},需避免副作用、过度嵌套,注重可读性。

列表推导式和字典推导式是 Python 中提升代码简洁性与可读性的核心技巧,它们用一行表达式替代多行循环+条件判断,既省代码又易维护。

列表推导式:快速生成新列表

基本语法:[表达式 for 变量 in 可迭代对象 if 条件]。它比传统 for 循环更紧凑,且执行效率通常更高。

  • 基础用法:把一个列表每个元素平方 [x**2 for x in [1, 2, 3, 4]][1, 4, 9, 16]
  • 带条件过滤:只保留偶数再平方 [x**2 for x in range(10) if x % 2 == 0][0, 4, 16, 36, 64]
  • 嵌套循环:生成所有坐标对 [(i, j) for i in range(2) for j in range(3)][(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

字典推导式:一键构建键值映射

语法类似:{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}。特别适合从序列、元组或已有字典派生新字典。

  • 基础转换:用字符串长度作值 {s: len(s) for s in ['cat', 'dog', 'elephant']}{'cat': 3, 'dog': 3, 'elephant': 8}
  • 翻转字典(要求原值可哈希){v: k for k, v in {'a': 1, 'b': 2}.items()}{1: 'a', 2: 'b'}
  • 过滤+处理:只保留长度大于 3 的键,并转为大写 {k.upper(): v for k, v in {'name': 'alice', 'age': 30, 'city': 'beijing'}.items() if len(k) > 3}{'CITY': 'beijing'}

注意事项:避免过度嵌套与副作用

推导式本质是表达式,不是语句,所以不能在其中使用 print()append() 或赋值操作(如 x = 1),否则会报错。

  • 错误示范:[print(x) for x in [1,2,3]] —— 虽能运行但返回 [None, None, None],且违背推导式“生成结果”的本意
  • 正确替代:需要调试时用普通循环;需要累积操作(如收集多个结果)优先考虑推导式本身,而非在内部调用方法
  • 可读性优先:当逻辑超过两层嵌套或条件复杂时,拆成函数或普通循环反而更清晰

对比传统写法:直观感受差异

任务:从 users 列表中提取所有年龄大于 25 的用户姓名,组成新列表。

  • 传统方式:
    names = []
    for user in users:
        if user['age'] > 25:
            names.append(user['name'])
  • 推导式写法:[user['name'] for user in users if user['age'] > 25]

后者更短、意图更明确,也更容易链式组合(比如后续加 sorted(...)[:5])。


# python  # app  # 可迭代对象 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎么制作U盘启动盘_Win11原版系统安装盘制作【详解】  PHP主流架构怎么处理表单验证_规则与自定义【技巧】  php订单日志权限怎么设_php订单日志文件权限设置技巧【技巧】  Windows10如何更改鼠标灵敏度_Win10鼠标属性指针选项调节  Windows10电脑怎么设置文件权限_Win10安全选项卡所有者修改  php中$this和::能混用吗_对象与静态作用域冲突解决【方法】  C#如何在一个XML文件中查找并替换文本内容  Win11输入法切换快捷键怎么改_Windows 11自定义语言切换键位【教程】  Win10怎么卸载爱奇艺_Win10彻底卸载爱奇艺方法【步骤】  Win11色盲模式怎么开_Win11屏幕颜色滤镜设置【关怀】  Win11怎么设置开机问候语_自定义Win11锁屏提示信息【技巧】  Drupal 中 HTML 链接被双重转义导致渲染异常的解决方案  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  如何提升Golang程序I/O性能_Golang I/O密集型程序优化示例  Golang如何遍历目录文件_Golang filepath.Walk目录遍历操作方法  Win11怎么更改计算机名_Windows11系统信息重命名设备教程  Go 中实现 Python urllib.quote() 等效功能的正确方式  如何使用Golang实现容器健康检查_监控和自动重启  c++如何使用std::bitset进行位图算法_c++ 快速查找与大规模数据排重【方法】  如何在 Go 中高效缓存与分发网络视频流  Mac的访达(Finder)怎么用_Mac文件管理入门教程【详解】  Linux如何安装JDK11_Linux环境变量配置与Java开发环境搭建【教程】  c++怎么处理多线程死锁_c++ lock_guard与unique_lock锁管理【技巧】  Win11怎么设置鼠标宏_Win11鼠标按键自定义编程教程【详解】  Python迭代器生成器进阶教程_节省内存与懒加载实战  Win11如何隐藏桌面图标 Win11一键隐藏/显示桌面图标【指南】  如何用::实现工具类方法调用_php静态工具类设计技巧【技巧】  Mac如何备份到iCloud_Mac桌面与文稿文件夹云同步【设置】  Win10怎样安装Word样式库_Win10安装Word样式教程【步骤】  如何使用Golang操作指针变量_Golang解引用与赋值实践  如何使用Golang实现多重错误处理_Golangerror组合与判断方法  MAC怎么设置程序窗口永远最前_MAC窗口置顶插件安装与快捷设置【方法】  php485返回空数组怎么回事_php485数据接收为空排查指南【详解】  Mac的“预览”如何合并多个PDF_Mac文件处理技巧【效率】  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  Django 密码修改后会话失效的解决方案  LINUX怎么查看进程_LINUX ps命令查看运行服务  c++输入输出流 c++ cin与cout格式化输出【方法】  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  Win11怎么更改电脑密码_Windows 11修改本地账户密码【步骤】  Win11怎么关闭定位服务_保护Win11位置隐私设置指南【详解】  Go 中实现 Python urllib.quote() 功能的等效方法  Python数据抓取合法性_合规说明【指导】  C++如何使用std::async进行异步编程?(future用法)  Mac怎么开启“任何来源”_Mac安装未签名应用的设置方法【解决】  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  如何使用Golang构建简易投票统计功能_Golang投票数据汇总与展示示例  Win11怎么更改管理员名字 Win11修改账户名称详细步骤【教程】  c++中如何求一个数的平方根_c++ sqrt函数与牛顿迭代法  LINUX怎么进行文本内容搜索_Linux grep命令正则表达式用法大全【教程】 

 2026-01-01

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.