一、列表推导式是什么?

列表推导式(List Comprehension)是 Python 中创建列表的简洁语法,本质是把「循环 + 条件判断 + 元素处理」浓缩成一行代码,比传统 for 循环 + append() 更高效、易读。

核心公式:

  • 表达式:对每个变量的处理(直接取值、计算、拼接等);

  • for 变量 in 可迭代对象:遍历列表、字符串、字典、range 等;

  • if 条件判断:可选,过滤符合条件的元素(不满足则跳过)。

二、基础示例:从传统循环到推导式

1. 无条件的基础遍历:创建 0-4 的整数列表

传统循环:

列表推导式:

2. 带条件过滤:筛选 0-9 中的偶数

传统循环:

列表推导式:

3. 带元素处理 + 条件:把 0-9 中的奇数乘以 10

三、进阶用法

1. 嵌套循环(替代双层 for)

需求:创建 [(1,1), (1,2), (2,1), (2,2)]。外层循环在前,内层在后。

2. 处理字符串 / 字典

从字符串中提取数字字符:

从字典中提取所有值:

3. 结合实际业务:找出缺失的工作表

拆解:表达式 name 直接取值;for name in sheet_names 遍历期望读取的表名;if name not in sheet_dict 过滤出实际没读到的。

四、优势与注意事项

优势

  • 代码简洁:一行搞定循环+条件,不用写 append();

  • 效率更高:底层由 C 实现,比纯 Python 循环更快;

  • 可读性强:声明式思维,告诉程序“要什么”而非“怎么做”。

注意事项

1. 避免过度嵌套:三层及以上循环会变得难读,此时拆成普通循环。

2. 条件判断的位置不同,作用不同:

  • 放在最后 [x for x in iter if cond] → 过滤元素,满足才保留;

  • 放在表达式里 [x if cond else y for x in iter] → 对元素做二选一处理。

3. 生成大列表时谨慎:推导式会一次性创建整个列表占内存,超大数据建议改用生成器表达式(把 [] 换成 ())。

五、总结

列表推导式是 Python 最常用的语法糖之一,核心是「表达式 + 遍历 + 可选条件」,适用于快速创建/过滤列表。记住:

  • 简单场景(单层/双层循环 + 简单条件)用推导式,简洁高效;

  • 复杂场景(多层循环/复杂逻辑)拆成普通循环,保证可读性。

它的核心价值是在“简洁”和“可读”之间找到平衡,也是 Pythonic Code 的典型体现。