📋 Python列表推导式完全指南:从入门到精通的优雅写法
列表推导式(List Comprehension)是Python中最优雅、最Pythonic的特性之一。它能让你用一行代码完成原本需要多行循环才能实现的功能,不仅代码更简洁,执行效率也更高。本文将带你从基础到进阶,彻底掌握这个强大的工具。
一、什么是列表推导式?
列表推导式是一种从现有列表创建新列表的简洁语法。它可以用一行代码替代传统的for循环,让代码更具可读性。
二、基本语法
[expression for item in iterable]
最简单的形式:对可迭代对象中的每个元素执行表达式,收集结果到新列表。
三、实战示例
示例1:生成平方数列表
# 传统方式
squares = []
for x in range(10):
squares.append(x ** 2)
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
# 列表推导式
squares = [x ** 2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
示例2:字符串处理
words = ['Hello', 'World', 'Python'] upper_words = [word.upper() for word in words] print(upper_words) # ['HELLO', 'WORLD', 'PYTHON'] # 获取字符串长度 lengths = [len(word) for word in words] print(lengths) # [5, 5, 6]
四、条件过滤
列表推导式支持if条件筛选,只保留满足条件的元素:
[expression for item in iterable if condition]
示例3:筛选偶数
# 传统方式
evens = []
for x in range(20):
if x % 2 == 0:
evens.append(x)
# 列表推导式
evens = [x for x in range(20) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
示例4:复杂条件筛选
# 筛选能被3整除但不能被2整除的数 result = [x for x in range(30) if x % 3 == 0 and x % 2 != 0] print(result) # [3, 9, 15, 21, 27] # 处理字符串列表,只保留长度大于3的单词 words = ['a', 'ab', 'abc', 'abcd', 'abcde'] long_words = [word for word in words if len(word) > 3] print(long_words) # ['abcd', 'abcde']
五、嵌套列表推导式
列表推导式支持多层嵌套,处理多维数据:
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 展开二维列表
flattened = [num for row in matrix for num in row]
print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
注意:嵌套推导式的执行顺序是从左到右,等价于:
flattened = []
for row in matrix:
for num in row:
flattened.append(num)
六、性能对比
列表推导式不仅代码更优雅,执行速度也更快:
import timeit
# 测试数据量
n = 10000
# 传统for循环
def loop_way():
result = []
for i in range(n):
result.append(i * 2)
return result
# 列表推导式
def comp_way():
return [i * 2 for i in range(n)]
# 性能测试
loop_time = timeit.timeit(loop_way, number=1000)
comp_time = timeit.timeit(comp_way, number=1000)
print(f"传统循环: {loop_time:.4f}秒")
print(f"列表推导式: {comp_time:.4f}秒")
print(f"速度提升: {loop_time/comp_time:.2f}倍")
在大多数情况下,列表推导式比传统循环快1.5-2倍,因为推导式在C层面优化执行。
七、其他推导式
Python还支持字典推导式和集合推导式:
字典推导式
words = ['apple', 'banana', 'cherry']
word_lengths = {word: len(word) for word in words}
print(word_lengths) # {'apple': 5, 'banana': 6, 'cherry': 6}
# 带条件的字典推导式
long_words = {word: len(word) for word in words if len(word) > 5}
print(long_words) # {'banana': 6, 'cherry': 6}
集合推导式
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique_squares = {x ** 2 for x in numbers}
print(unique_squares) # {16, 1, 4, 9} - 自动去重
八、注意事项
虽然列表推导式很强大,但也要避免过度使用:
- 可读性优先:如果推导式过于复杂,建议使用传统循环
- 内存占用:大数据量考虑使用生成器表达式
(x for x in data) - 副作用:避免在推导式中执行有副作用的操作(如打印、修改外部变量)
总结
列表推导式是Python的精髓特性之一,掌握它能让你的代码更加Pythonic。核心要点:
- 基本语法:
[expr for item in iterable] - 条件过滤:
[expr for item in iterable if condition] - 多层嵌套从左到右执行
- 性能优于传统循环
- 还有字典和集合推导式可用
善用列表推导式,写出简洁、高效、优雅的Python代码!

浙公网安备 33010602011771号