大家好!今天分享一个 Python 最核心、最高频、最能提升代码质感的小技巧——列表推导式(List Comprehension)。
很多新手写 Python 代码时,总喜欢写冗长的 for 循环,代码堆砌繁琐、可读性差。而列表推导式可以一行代码替代多行循环,精简代码的同时,执行效率更高,也是 Pythonic 风格的核心体现。
这篇文章从零开始,手把手带你掌握列表推导式,零基础也能轻松看懂,日常开发、刷题、数据分析都能直接复用。
一、什么是列表推导式?
简单来说:列表推导式是 Python 专门用于快速创建、处理列表的语法,用一行代码,完成「循环 + 判断 + 赋值」的整套操作。
基础语法结构:
[表达式 for 变量 in 可迭代对象]
带条件筛选的进阶语法:
[表达式 for 变量 in 可迭代对象 if 条件判断]
二、基础实操:告别冗余 for 循环
我们用最经典的案例对比,直观感受列表推导式的优势:生成 1-10 的数字列表。
1. 传统 for 循环写法(冗余)
# 初始化空列表
num_list = []
# 循环遍历赋值
for i in range(1, 11):
num_list.append(i)
print(num_list)
# 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
仅仅生成一个简单列表,就需要 4 行核心代码,逻辑繁琐,重复性高。
2. 列表推导式写法(极简)
num_list = [i for i in range(1, 11)]
print(num_list)
# 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
一行搞定全部逻辑,代码简洁清晰,功能完全一致,这就是 Python 的优雅之处。
三、进阶用法:条件筛选+数据处理
列表推导式真正的强大之处,在于支持条件筛选和数据二次加工,日常开发中使用率极高。
1. 条件筛选:筛选偶数
需求:快速提取 1-10 中的所有偶数
# 筛选能被2整除的数字
even_list = [i for i in range(1, 11) if i % 2 == 0]
print(even_list)
# 输出:[2, 4, 6, 8, 10]
2. 数据加工:遍历并运算
需求:将 1-5 的数字,全部平方后生成新列表
square_list = [i ** 2 for i in range(1, 6)]
print(square_list)
# 输出:[1, 4, 9, 16, 25]
3. 双重循环:嵌套遍历
需求:实现两个列表的元素两两组合(替代双层 for 循环)
list1 = [1, 2, 3]
list2 = ['a', 'b']
# 双重列表推导式
mix_list = [(x, y) for x in list1 for y in list2]
print(mix_list)
# 输出:[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
四、常见实战场景(工作/刷题必备)
分享 3 个日常开发最常用的场景,直接复制可用:
1. 过滤列表空值
data = [1, "", None, 5, "", 8, None]
# 去除空字符串和None
clean_data = [x for x in data if x]
print(clean_data)
# 输出:[1, 5, 8]
2. 字符串列表统一转大写
words = ["python", "java", "go", "c++"]
upper_words = [word.upper() for word in words]
print(upper_words)
# 输出:['PYTHON', 'JAVA', 'GO', 'C++']
3. 提取字典 key/value
student = {"name": "张三", "age": 20, "score": 90}
# 提取所有value
values = [v for v in student.values()]
print(values)
# 输出:['张三', 20, 90]
五、使用注意事项
列表推导式虽好,但不要滥用,记住两个原则:
- 拒绝过度嵌套:三层及以上循环不建议用推导式,会导致代码可读性极差,不如普通 for 循环清晰。
- 复杂逻辑拆分:如果内部运算、判断逻辑过于复杂,建议单独封装函数,不要全部堆砌在一行。
- 大数据量慎用:列表推导式会一次性生成完整列表,数据量极大时建议用生成器表达式,节省内存。
六、总结
列表推导式是 Python 性价比极高的基础技巧,掌握它可以:
- 精简 80% 的循环代码
- 让代码更符合 Python 规范,优雅易读
- 提升代码执行效率,告别冗余写法
所有 Python 开发者都应该熟练掌握这个语法,无论是日常业务开发、算法刷题,还是数据分析,都是刚需技能。