推导式(Comprehension)是Python中的一种独特语法,它让我们能用一行代码创建序列(如列表、字典、集合)。就像是一个"魔法公式",帮你快速生成数据!
想象你需要制作一个包含1到10所有数字平方的列表。传统方法需要循环:
# 传统方法:使用for循环
平方列表 = []
for 数字 in range(1, 11):
平方列表.append(数字 ** 2)
print(平方列表) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
而使用推导式,只需一行:
# 使用列表推导式
平方列表 = [数字 ** 2 for 数字 in range(1, 11)]
print(平方列表) # 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
是不是简洁多了?这就是推导式的魅力!😍
[表达式 for 变量 in 可迭代对象]
[表达式 for 变量 in 可迭代对象 if 条件]
# 例子1:创建1到10的偶数列表
偶数列表 = [数字 for 数字 in range(1, 11) if 数字 % 2 == 0]
print(偶数列表) # 输出:[2, 4, 6, 8, 10]
# 例子2:将水果名称转换为大写
水果 = ["苹果", "香蕉", "草莓"]
大写水果 = [名称.upper() for 名称 in 水果]
print(大写水果) # 输出:['苹果', '香蕉', '草莓']
# 例子3:创建姓名和问候语的组合
名字列表 = ["小明", "小红", "小华"]
问候语 = [f"你好,{名字}!" for 名字 in 名字列表]
print(问候语) # 输出:['你好,小明!', '你好,小红!', '你好,小华!']
{键表达式: 值表达式 for 变量 in 可迭代对象}
# 例子1:创建数字及其平方的字典
平方字典 = {数字: 数字**2 for 数字 in range(1, 6)}
print(平方字典) # 输出:{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 例子2:将水果列表转换为字典,键为水果名,值为长度
水果 = ["苹果", "香蕉", "草莓"]
水果长度字典 = {水果名: len(水果名) for 水果名 in 水果}
print(水果长度字典) # 输出:{'苹果': 2, '香蕉': 2, '草莓': 2}
{表达式 for 变量 in 可迭代对象}
# 例子1:创建1到10的奇数集合
奇数集合 = {数字 for 数字 in range(1, 11) if 数字 % 2 == 1}
print(奇数集合) # 输出:{1, 3, 5, 7, 9}
# 例子2:提取字符串中的所有不同字符
文本 = "hello world"
字符集合 = {字符 for 字符 in 文本 if 字符 != ' '}
print(字符集合) # 输出:{'h', 'e', 'l', 'o', 'w', 'r', 'd'}
生成器表达式看起来像列表推导式,但使用圆括号而不是方括号。它不会立即创建完整的列表,而是按需生成元素,非常适合处理大数据。
(表达式 for 变量 in 可迭代对象)
# 例子:创建一个包含1到1000000的平方的生成器
平方生成器 = (数字**2 for 数字 in range(1, 1000001))
# 注意:这不会立即计算所有值,而是按需计算
print(next(平方生成器)) # 输出:1(第一个元素)
print(next(平方生成器)) # 输出:4(第二个元素)
# 使用生成器计算前10个平方和
平方生成器2 = (数字**2 for 数字 in range(1, 1000001))
前十个和 = sum(next(平方生成器2) for _ in range(10))
print(f"前10个平方和:{前十个和}") # 输出前10个平方和
嵌套推导式:
# 创建一个3x3的矩阵,每个元素是行号+列号
矩阵 = [[行+列 for 列 in range(3)] for 行 in range(3)]
print(矩阵) # 输出:[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
推导式vs循环:
性能提示:
推导式是Python中非常强大的特性,掌握它们可以: