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("水果数量:", 水果数量)保持简洁:推导式应该简洁明了,如果太复杂就使用普通循环
注意可读性:不要为了简洁牺牲代码的可读性
选择合适类型:根据需求选择列表、字典或集合推导式
考虑内存:处理大数据时考虑使用生成器表达式
好的例子:
# 简洁明了
偶数 = [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]要掌握推导式,建议:
从简单的列表推导式开始练习
理解各种推导式的语法差异
在实际项目中应用推导式
注意推导式与普通循环的性能差异
记住,推导式是Python的特色功能,合理使用可以让代码更优雅。但也不要过度使用,保持代码的可读性更重要。随着编程经验的积累,你会自然掌握何时使用推导式最合适。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!