🚀 Python列表推导式完全指南:一行代码的艺术
🚀 Python列表推导式完全指南:一行代码的艺术
📖 引言
列表推导式(List Comprehension)是Python中最优雅、最Pythonic的特性之一。它允许你用最简洁的语法创建列表,往往只需要一行代码就能完成传统循环多行才能实现的功能。本文将带你从基础到进阶,彻底掌握这个强大的工具。
🎯 什么是列表推导式?
列表推导式提供了一种简洁的方式来创建列表。它由一个表达式和一个for循环组成,可以可选地包含if条件语句。
基本语法
[expression for item in iterable]
💡 基础用法
1. 创建简单列表
# 传统方式
squares = []
for x in range(10):
squares.append(x**2)
# 列表推导式
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
2. 带条件的列表推导式
# 筛选偶数 evens = [x for x in range(20) if x % 2 == 0] print(evens) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] # 筛选并转换 result = [x**2 for x in range(20) if x % 2 == 0] print(result) # [0, 4, 16, 36, 64, 100, 144, 196, 256, 324]
🔥 进阶技巧
3. 多重循环
# 传统嵌套循环
pairs = []
for x in [1, 2, 3]:
for y in [3, 1, 4]:
if x != y:
pairs.append((x, y))
# 列表推导式
pairs = [(x, y) for x in [1, 2, 3] for y in [3, 1, 4] if x != y]
print(pairs) # [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
4. 处理字符串
words = ["Hello", "World", "Python", "List", "Comprehension"] # 获取单词长度 lengths = [len(word) for word in words] print(lengths) # [5, 5, 6, 4, 13] # 转换为大写并筛选长度大于5的 long_words = [word.upper() for word in words if len(word) > 5] print(long_words) # ['PYTHON', 'COMPREHENSION']
5. 使用函数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 获取1-50之间的素数
primes = [x for x in range(1, 51) if is_prime(x)]
print(primes) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
⚡ 性能对比
列表推导式不仅代码更简洁,运行速度也更快:
import timeit
# 传统循环
def traditional():
result = []
for i in range(1000):
if i % 2 == 0:
result.append(i * 2)
return result
# 列表推导式
def comprehension():
return [i * 2 for i in range(1000) if i % 2 == 0]
print(timeit.timeit(traditional, number=10000))
print(timeit.timeit(comprehension, number=10000))
# 列表推导式通常快1.2-2倍
🎨 其他推导式
字典推导式
numbers = [1, 2, 3, 4, 5]
square_dict = {x: x**2 for x in numbers}
print(square_dict) # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
集合推导式
text = "hello world"
unique_chars = {c for c in text if c.isalpha()}
print(unique_chars) # {'h', 'e', 'l', 'o', 'w', 'r', 'd'}
⚠️ 注意事项
1. 可读性优先
不要为了使用列表推导式而牺牲可读性。如果逻辑太复杂,使用传统循环更清晰。
# 不好的例子(太难读懂)
result = [[x*y for y in range(10) if y % 2 == 0] for x in range(20) if x % 3 == 0]
# 更好的做法
result = []
for x in range(20):
if x % 3 == 0:
row = [x*y for y in range(10) if y % 2 == 0]
result.append(row)
2. 避免副作用
列表推导式应该用于创建新列表,不要在表达式中产生副作用:
# 不好的做法
[print(x) for x in range(5)] # 只是产生副作用,用普通循环更好
# 正确的做法
for x in range(5):
print(x)
📝 实战案例
案例1:矩阵转置
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 矩阵转置
transposed = [[row[i] for row in matrix] for i in range(3)]
print(transposed) # [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
案例2:展平嵌套列表
nested = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flat = [item for sublist in nested for item in sublist] print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
案例3:文件处理
# 读取文件并过滤空行和注释
with open('data.txt', 'r') as f:
lines = [line.strip() for line in f if line.strip() and not line.startswith('#')]
🎉 总结
列表推导式是Python编程中不可或缺的工具。掌握它能让你写出更简洁、更高效的代码。记住核心原则:
- ✅ 用于简单的数据转换和过滤
- ✅ 追求代码简洁的同时保持可读性
- ❌ 避免过于复杂的嵌套
- ❌ 不要在推导式中产生副作用
多加练习,你很快就能像Python高手一样,用一行代码解决复杂问题!
本文属于「Python完全指南」系列教程。如果你觉得有帮助,欢迎点赞收藏!

浙公网安备 33010602011771号