pin_drop当前位置:知识文库 ❯ 图文
Python列表推导式
概述
列表推导式(List Comprehension)是 Python 中一种简洁优雅的创建列表的方式。它将循环和条件判断浓缩在一行表达式中,使代码更加简洁、可读。列表推导式是 Python 最具特色的语法之一,掌握它可以大幅提升编码效率。
基本语法
代码示例
[expression for item in iterable]基本用法
创建平方列表
代码示例
squares = [x ** 2 for x in range(1, 6)]
print(squares)输出:
代码示例
[1, 4, 9, 16, 25]转换元素类型
代码示例
nums = [1, 2, 3, 4, 5]
strs = [str(x) for x in nums]
print(strs)输出:
代码示例
['1', '2', '3', '4', '5']带条件判断
代码示例
[expression for item in iterable if condition]过滤偶数
代码示例
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [x for x in nums if x % 2 == 0]
print(evens)输出:
代码示例
[2, 4, 6, 8, 10]带条件表达式
代码示例
nums = [1, 2, 3, 4, 5]
labels = ["偶" if x % 2 == 0 else "奇" for x in nums]
print(labels)输出:
代码示例
['奇', '偶', '奇', '偶', '奇']嵌套推导式
展开嵌套列表
代码示例
nested = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for sub in nested for x in sub]
print(flat)输出:
代码示例
[1, 2, 3, 4, 5, 6, 7, 8, 9]提示:嵌套推导式的阅读顺序:从左到右,等同于嵌套 for 循环的从外到内。
生成组合
代码示例
pairs = [(x, y) for x in range(1, 4) for y in range(1, 4) if x != y]
print(pairs)输出:
代码示例
[(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]与 for 循环对比
代码示例
# 使用 for 循环
squares = []
for x in range(1, 6):
squares.append(x ** 2)
# 使用列表推导式
squares = [x ** 2 for x in range(1, 6)]常见应用场景
字符串处理
代码示例
words = ["Hello", "World", "Python"]
lower = [w.lower() for w in words]
print(lower)输出:
代码示例
['hello', 'world', 'python']字典转列表
代码示例
person = {"name": "Alice", "age": 25, "city": "Beijing"}
pairs = [f"{k}={v}" for k, v in person.items()]
print(pairs)输出:
代码示例
['name=Alice', 'age=25', 'city=Beijing']文件名过滤
代码示例
files = ["data.csv", "image.png", "report.csv", "logo.jpg"]
csv_files = [f for f in files if f.endswith(".csv")]
print(csv_files)输出:
代码示例
['data.csv', 'report.csv']注意事项
警告:不要过度使用:当推导式过于复杂时,可读性会大幅下降,此时应使用普通 for 循环。
警告:避免副作用:列表推导式应只用于创建列表,不要在其中执行有副作用的操作(如修改外部变量)。
警告:内存问题:列表推导式会一次性生成所有元素,大数据量时考虑使用生成器表达式
(...)代替[...]。
小结
列表推导式用一行代码创建列表,语法简洁优雅
支持条件过滤和嵌套循环
简单场景优于 for 循环,复杂逻辑应避免使用
大数据量考虑使用生成器表达式节省内存
练习题
练习1
使用列表推导式生成一个包含 1 到 100 中所有能被 3 整除但不能被 5 整除的数字的列表。
练习2
给定字符串列表 words = ["hello", "", "world", "", "python", ""],使用列表推导式删除空字符串,并将非空字符串首字母大写。
常见问题
列表推导式和 for 循环有什么区别?
列表推导式代码更简洁、性能略快(底层优化),适合简单场景;for 循环逻辑更清晰,适合复杂逻辑。选择时优先考虑可读性。
列表推导式可以嵌套吗?
可以。嵌套推导式的阅读顺序从左到右,等同于嵌套 for 循环从外到内。但注意不要过度嵌套,以免影响可读性。
大数据量时使用列表推导式会有内存问题吗?
会。列表推导式会一次性生成所有元素,处理大数据量时建议使用生成器表达式 (...) 代替 [...],以节省内存。
标签:
列表推导式
Python基础
列表操作
Python技巧
编程入门
代码优化
本文涉及AI创作
内容由AI创作,请仔细甄别