语法糖:一种让代码写起来更“甜”的写法。本质不变,只改变写法。让代码更短,让你更爽。
列表推导式:快速创建一个新列表
- 作用:快速基于任意可迭代对象(range、列表、文件遍历等)生成全新列表
# 生成0~9每个数字的平方squares = []for i in range(10): squares.append(i ** 2)print(squares)
squares = [i ** 2for i in range(10)]print(squares)
- 通用格式:
[表达式 for 变量 in 可迭代对象 if 筛选条件]
实战场景:获取文件夹下所有文件的绝对路径
- 新建脚本
list-comprehension.py
import os# 使用原始字符串r""规避Windows路径转义报错folder = r"D:\zhj"# 遍历目录,筛选出文件并拼接完整绝对路径paths = [ os.path.abspath(os.path.join(folder, f))for f in os.listdir(folder)if os.path.isfile(os.path.join(folder, f))]# 循环打印所有文件路径for p in paths: print(p)
python D:/python/list-comprehension.py
- 运行结果

even_square = [i**2for i in range(10) if i % 2 == 0]
字典推导式:生成字典 {key:value}
- 作用:遍历键值对可迭代对象,一键构建字典;支持数据转换、筛选、键值互换
students = [("张三", 90), ("李四", 85), ("王五", 96)]scores = {}for name, score in students: scores[name] = score
scores = {name: score for name, score in students}
- 通用格式:
{键表达式: 值表达式 for 变量 in 可迭代对象 if 筛选条件}
实战场景:对象列表转 ID 映射字典
- 新建脚本
dict-comprehension.py
# 定义用户实体类classUser:def__init__(self, id, name): self.id = id self.name = name# 用户对象列表user_list = [ User(1, "孙开元"), User(2, "孙静美"), User(3, "刘艳")]# 字典推导式:以用户id为键,用户姓名为值user_dict = {user.id: user.name for user in user_list}# 结果验证print(user_dict) # {1: '孙开元', 2: '孙静美', 3: '刘艳'}print(user_dict[2]) # 根据id查询姓名:孙静美
python D:/python/dict-comprehension.py

💡 易错提醒:推导式中若出现重复 key,后遍历的值会覆盖前面的值
集合推导式:生成集合 {value}
集合和字典都使用大括号 {}。
区分规则:
特性:自动去重、无序,适合提取唯一数据
# 自动剔除重复数字unique_nums = {x for x in [1, 2, 2, 3, 3, 3]}print(unique_nums) # {1, 2, 3}
- 通用格式:
{表达式 for 变量 in 可迭代对象 if 筛选条件}
实战场景:提取文本所有不重复词组
text = "苹果 香蕉 苹果 橘子 香蕉 葡萄"unique_word = {word for word in text.split(' ')}print(unique_word)
python D:/python/set-comprehension.py

核心总结
- 本质:三种推导式均为声明式编程,只描述 “想要什么结果”,Python 自动完成循环遍历;
- 集合:
{val},自动去重、无序,专门提取唯一数据