Python3入门指南Python语言的特点和实际应用Python3环境搭建配置VSCode进行Python开发Python基础语法Python变量与数据类型Python数据类型转换Python解释器使用Python注释使用Python运算符Python数字类型Python字符串操作Python列表操作Python元组使用Python字典使用Python集合使用Python条件控制详解Python循环语句详解Python编程入门实践Python推导式详解Python迭代器和生成器Python with语句详解Python函数详解Python lambda(匿名函数)Python装饰器Python数据结构Python模块和包使用Python中__name__和__main__的用法Python输入输出:从基础到文件操作Python文件操作Python OS模块使用Python错误和异常处理Python面向对象编程Python命名空间和作用域Python虚拟环境:venv详细教程Python类型注解Python标准库常用模块Python正则表达式Python CGI编程Python MySQL(mysql-connector驱动)Python MySQL(PyMySQL驱动)Python网络编程Python发送邮件Python多线程编程Python XML解析Python JSON解析Python日期和时间处理Python操作MongoDBPython urllib库使用Python uWSGI 安装与配置Python pip包管理工具Python operator模块Python math模块Python requests模块HTTP请求Python random模块Python OpenAI库Python AI绘画制作Python statistics模块Python hashlib模块:哈希加密Python量化交易Python pyecharts数据可视化Python Selenium网页自动化Python BeautifulSoup网页数据提取Python Scrapy爬虫框架Python Markdown转HTMLPython sys模块Python Pickle模块:数据存储Python subprocess模块Python queue队列模块Python StringIO内存文件操作Python logging日志记录Python datetime日期时间处理Python re正则表达式Python csv表格数据处理Python threading 多线程编程Python asyncio 异步编程Python PyQt 图形界面开发Python 应用方向和常用库框架

Python推导式详解

Python推导式是一种简洁的数据处理语法,能够快速创建列表、字典、集合等数据结构。使用推导式可以让代码更简洁、更易读。


什么是推导式

推导式是Python中的一种语法结构,可以从一个数据序列快速创建另一个数据序列。它把循环和条件判断结合在一起,用一行代码完成多行代码的功能。

推导式的主要优点:

  • 代码更简洁

  • 执行效率更高

  • 可读性更好


列表推导式

列表推导式是最常用的推导式类型,用于快速创建列表。

基本语法:

[表达式 for 变量 in 序列]

简单示例:

# 创建1到5的平方列表
平方列表 = [x*x for x in range(1, 6)]
print(平方列表)  # 输出:[1, 4, 9, 16, 25]

带条件的列表推导式:

# 只保留偶数的平方
偶数平方 = [x*x for x in range(1, 11) if x % 2 == 0]
print(偶数平方)  # 输出:[4, 16, 36, 64, 100]

实际应用:

# 处理学生成绩
成绩列表 = [85, 92, 78, 60, 45, 88, 95]

# 筛选及格成绩
及格成绩 = [成绩 for 成绩 in 成绩列表 if 成绩 >= 60]
print("及格成绩:", 及格成绩)

# 将成绩转换为等级
成绩等级 = ["优秀" if 成绩 >= 90 else "良好" if 成绩 >= 80 else "及格" for 成绩 in 成绩列表]
print("成绩等级:", 成绩等级)

处理字符串列表:

名字列表 = ['张三', '李四', '王五', '赵六']

# 为每个名字添加"同学"后缀
完整称呼 = [名字 + "同学" for 名字 in 名字列表]
print(完整称呼)  # 输出:['张三同学', '李四同学', '王五同学', '赵六同学']

# 筛选长度超过2个字符的名字
长名字 = [名字 for 名字 in 名字列表 if len(名字) > 2]
print(长名字)  # 输出:[]


字典推导式

字典推导式用于快速创建字典。

基本语法:

{键表达式: 值表达式 for 变量 in 序列}

简单示例:

# 创建数字和其平方的字典
平方字典 = {x: x*x for x in range(1, 6)}
print(平方字典)  # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

带条件的字典推导式:

# 只为偶数创建平方项
偶数平方字典 = {x: x*x for x in range(1, 11) if x % 2 == 0}
print(偶数平方字典)  # 输出:{2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

实际应用:

# 学生信息处理
学生列表 = ['小明', '小红', '小刚']
成绩列表 = [85, 92, 78]

# 创建学生-成绩字典
学生成绩字典 = {学生: 成绩 for 学生, 成绩 in zip(学生列表, 成绩列表)}
print("学生成绩:", 学生成绩字典)

# 转换字典键值大小写
原始字典 = {'name': 'John', 'AGE': 25, 'City': 'Beijing'}
统一小写键 = {键.lower(): 值 for 键, 值 in 原始字典.items()}
print("统一小写键:", 统一小写键)


集合推导式

集合推导式用于创建集合,自动去除重复元素。

基本语法:

{表达式 for 变量 in 序列}

简单示例:

# 创建平方数的集合
平方集合 = {x*x for x in range(1, 6)}
print(平方集合)  # 输出:{1, 4, 9, 16, 25}

带条件的集合推导式:

# 从字符串中提取不重复的字母
文本 = "hello world"
唯一字母 = {字符 for 字符 in 文本 if 字符.isalpha()}
print(唯一字母)  # 输出:{'h', 'e', 'l', 'o', 'w', 'r', 'd'}

实际应用:

# 数据去重
重复数据 = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
唯一数据 = {x for x in 重复数据}
print("去重后:", 唯一数据)  # 输出:{1, 2, 3, 4}

# 筛选满足条件的数字
数字集合 = {x for x in range(20) if x % 3 == 0 or x % 5 == 0}
print("3或5的倍数:", 数字集合)  # 输出:{0, 3, 5, 6, 9, 10, 12, 15, 18}


生成器表达式

生成器表达式与列表推导式类似,但使用圆括号,返回生成器对象,更节省内存。

基本语法:

(表达式 for 变量 in 序列)

简单示例:

# 创建生成器
平方生成器 = (x*x for x in range(1, 6))

# 使用生成器
for 结果 in 平方生成器:
    print(结果, end=' ')  # 输出:1 4 9 16 25
print()

# 转换为元组
生成器对象 = (x for x in range(1, 6) if x % 2 == 0)
元组结果 = tuple(生成器对象)
print("偶数元组:", 元组结果)  # 输出:(2, 4)


综合应用实例

数据处理:

# 学生数据处理
学生数据 = [
    {'姓名': '张三', '年龄': 20, '成绩': 85},
    {'姓名': '李四', '年龄': 19, '成绩': 92},
    {'姓名': '王五', '年龄': 21, '成绩': 78},
    {'姓名': '赵六', '年龄': 20, '成绩': 88}
]

# 提取所有学生姓名
姓名列表 = [学生['姓名'] for 学生 in 学生数据]
print("学生姓名:", 姓名列表)

# 创建成绩字典
成绩字典 = {学生['姓名']: 学生['成绩'] for 学生 in 学生数据}
print("成绩字典:", 成绩字典)

# 筛选优秀学生(成绩>=85)
优秀学生 = {学生['姓名'] for 学生 in 学生数据 if 学生['成绩'] >= 85}
print("优秀学生:", 优秀学生)

文件处理:

# 假设有一个文本文件,我们可以这样处理
行数据 = ["apple 5", "banana 3", "orange 8", "grape 2"]

# 提取水果名称
水果名称 = [行.split()[0] for 行 in 行数据]
print("水果名称:", 水果名称)

# 创建水果数量字典
水果数量 = {行.split()[0]: int(行.split()[1]) for 行 in 行数据}
print("水果数量:", 水果数量)


使用建议

  1. 保持简洁:推导式应该简洁明了,如果太复杂就使用普通循环

  2. 注意可读性:不要为了简洁牺牲代码的可读性

  3. 选择合适类型:根据需求选择列表、字典或集合推导式

  4. 考虑内存:处理大数据时考虑使用生成器表达式

好的例子:

# 简洁明了
偶数 = [x for x in range(10) if x % 2 == 0]

避免的例子:

# 过于复杂,难以理解
复杂结果 = [x*y if x > 2 else x+y for x in range(5) for y in range(3) if x != y]


学习建议

要掌握推导式,建议:

  1. 从简单的列表推导式开始练习

  2. 理解各种推导式的语法差异

  3. 在实际项目中应用推导式

  4. 注意推导式与普通循环的性能差异

记住,推导式是Python的特色功能,合理使用可以让代码更优雅。但也不要过度使用,保持代码的可读性更重要。随着编程经验的积累,你会自然掌握何时使用推导式最合适。

本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!

链接: https://fly63.com/course/36_2091

目录选择