在Python编程里,列表推导式绝对是最优雅、最高效的语法糖之一!它能用一行代码替代多行循环,快速生成、过滤、转换列表,代码既简洁又易读,不管是新手入门还是老手优化代码,都是必学技能。
今天就用通俗易懂的方式,带你彻底掌握列表推导式,看完直接上手用!
一、什么是列表推导式?
列表推导式是Python专门用于创建列表的精简语法,核心作用就是简化循环+生成列表,把原本需要3-5行的代码,压缩成一行,逻辑清晰还不丢可读性。
核心语法结构
# 基础格式
新列表 = [表达式 for 变量 in 可迭代对象]
# 带条件过滤的格式(最常用)
新列表 = [表达式 for 变量 in 可迭代对象 if 条件]
简单拆解:
- 表达式:最终要存入列表的元素(可以是变量、计算、函数调用)
- for 变量 in 可迭代对象:遍历循环(和普通for循环逻辑一样)
二、为什么要用列表推导式?
- 代码极简:一行搞定,告别冗余的for循环+append
- 功能强大:支持计算、过滤、嵌套,覆盖90%列表生成场景
三、超实用举例(从简单到进阶,直接复制用)
1. 基础版:快速生成列表(无过滤)
最基础用法,直接遍历生成新列表,替代append循环。
例子1:生成0-9的数字列表
普通写法:
num_list = []
for i in range(10):
num_list.append(i)
print(num_list) # [0,1,2,3,4,5,6,7,8,9]
列表推导式写法(一行搞定):
num_list = [i for i in range(10)]
print(num_list) # [0,1,2,3,4,5,6,7,8,9]
例子2:生成字符串列表
# 把字母遍历生成列表
char_list = [c for c in"python"]
print(char_list) # ['p','y','t','h','o','n']
2. 进阶版:带计算/转换(生成处理后的元素)
表达式不只是变量,还能做数学计算、字符串拼接、类型转换。
例子1:生成1-10的平方数
square_list = [i**2for i in range(1,11)]
print(square_list) # [1,4,9,16,25,36,49,64,81,100]
例子2:数字转字符串
str_list = [str(i) for i in [1,2,3,4]]
print(str_list) # ['1','2','3','4']
例子3:字符串拼接
name_list = ["张三","李四","王五"]
new_list = [f"用户:{name}"for name in name_list]
print(new_list) # ['用户:张三', '用户:李四', '用户:王五']
3. 实用版:带条件过滤(筛选元素)
加if 条件,只保留符合要求的元素,不用写单独的if判断。
例子1:筛选1-10的偶数
even_list = [i for i in range(1,11) if i % 2 == 0]
print(even_list) # [2,4,6,8,10]
例子2:筛选长度≥3的单词
words = ["cat","apple","hi","python","ok"]
long_words = [w for w in words if len(w) >= 3]
print(long_words) # ['cat','apple','python']
例子3:筛选大于5的数字
nums = [1,8,3,10,5,7]
big_nums = [n for n in nums if n > 5]
print(big_nums) # [8,10,7]
4. 高阶版:多条件过滤(精准筛选)
支持多个if条件,相当于且的关系。
# 筛选1-20之间,偶数且大于10的数字
num_list = [i for i in range(1,21) if i%2==0if i>10]
print(num_list) # [12,14,16,18,20]
5. 终极版:嵌套循环(处理二维数据)
支持双层for循环,适合扁平化二维列表、生成组合数据。
例子1:扁平化二维列表
# 把二维列表转成一维
matrix = [[1,2],[3,4],[5,6]]
flat_list = [num for row in matrix for num in row]
print(flat_list) # [1,2,3,4,5,6]
例子2:生成两个列表的元素组合
# 生成字母+数字的所有组合
letters = ["a","b"]
numbers = [1,2]
combo = [l+str(n) for l in letters for n in numbers]
print(combo) # ['a1','a2','b1','b2']
四、列表推导式 vs 普通循环:对比总结
小提醒:如果逻辑特别复杂(超过3层循环、多分支判断),别强行用列表推导式,优先用普通循环保证可读性~
五、快速总结
- 基础公式:
[表达式 for 变量 in 可迭代对象] - 过滤公式:
[表达式 for 变量 in 可迭代对象 if 条件] - 适用场景:生成列表、转换元素、过滤数据、扁平化嵌套列表
学会列表推导式,你的Python代码直接进阶「优雅风」,日常写代码效率翻倍!