推导式详解

列表推导式

列表推导式是一种简洁的创建列表的方法,可以包含条件语句和嵌套循环。
推导式的执行顺序是:从左到右,先执行外层循环,再执行内层循环。

# 生成1到10的平方列表,仅包含偶数
squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(squares)  # 输出: [4, 16, 36, 64, 100]

生成器表达式

生成器表达式与列表推导式类似,但使用圆括号而不是方括号,生成的是一个生成器对象,适合处理大数据集。

# 生成1到10的平方生成器,仅包含偶数
squares_gen = (x**2 for x in range(1, 11) if x % 2 == 0)
for square in squares_gen:
    print(square)  # 输出: 4, 16, 36, 64, 100

字典推导式

字典推导式用于创建字典,可以包含条件语句和嵌套循环。

# 生成1到10的平方字典,仅包含偶数
squares_dict = {x: x**2 for x in range(1, 11) if x % 2 == 0}
print(squares_dict)  # 输出: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}

集合推导式

集合推导式用于创建集合,可以包含条件语句和嵌套循环。

# 生成1到10的平方集合,仅包含偶数
squares_set = {x**2 for x in range(1, 11) if x % 2 == 0}
print(squares_set)  # 输出: {16, 64, 4, 36, 100}

复杂推导式示例

推导式可以嵌套使用,处理更复杂的数据结构。

# 生成一个包含嵌套列表的字典,键为1到5,值为对应键的平方列表,仅包含偶数
complex_dict = {x: [y**2 for y in range(1, x+1) if y % 2 == 0] for x in range(1, 6)}
print(complex_dict)  # 输出: {1: [], 2: [4], 3: [4], 4: [4, 16], 5: [4, 16]}

等效于(字典推导式的值部分可以包含独立推导式,字典级循环始终是外层):

result = {}
for x in range(5):          # 外层循环(字典级)
    result[x] = [y for y in range(x)]  # 值部分的列表推导式
 

推导式中的多重条件

推导式可以包含多个条件,使用逻辑运算符连接。

# 生成1到20的平方列表,仅包含能被2或3整除的数
squares = [x**2 for x in range(1, 21) if x % 2 == 0 or x % 3 == 0]
print(squares)  # 输出: [4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]

推导式中的嵌套循环

推导式可以包含嵌套循环,处理多维数据。

# 生成一个包含所有可能组合的列表,其中x和y的范围为1到3
combinations = [(x, y) for x in range(1, 4) for y in range(1, 4)]
print(combinations)  # 输出: [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

这段推导式等效于:

result = []
for x in range(3):       # 外层循环
    for y in range(3):   # 内层循环
        result.append((x,y))
 

推导式是Python中非常强大的工具,能够简洁高效地处理数据生成和转换任务。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值