python之推导式

本文介绍了Python的推导式,它是Python独有的特性,可简化代码。详细阐述了列表推导式的多种用法,还提到集合推导式与列表推导式类似,只是将方括号换为花括号。此外,介绍了字典推导式,并指出元组不能直接用推导式,需通过类型强制转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、推导式

推导式:comprehensions(又称解析式),是Python的一种独有特性,相当于语法糖的存在,在某些时候可以简化代码。

2、列表推导式

PYTHON提供的一种可以快速生成列表的方式,列表推导式
语法:变量 = [推导表达式]
(1)最基本的列表推导式

my_list1 = [x for x in range(0,10)]
print(my_list1)
# 结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

想当于:

my_list1 = list()
for i in rang(0,10):
    my_list1.append(i)
print(my_list1)

(2)附带运算的列表推导式

my_list2 = [x**2 for x in range(0,10)]
print(my_list2)
# 结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

相当于x每取一个数值,都要进行平方运算,然后在存到列表中。
(3)附带条件的列表推导式

my_list3 = [x for x in range(0,20) if x % 2 == 0]
print(my_list3)
# 结果:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

(4)多重循环的列表推导式

my_list4 = [x + y for x in range(0,5) for y in range(0,2)]
print(my_list4)
# x :0 1 2 3 4
# y :0 1
# 结果:[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]

(5)更多用法:

my_dict = {"tom":"18","jerry":"19","ruiwen":"18"}
my_list5 = [k+":"+v for k,v in my_dict.items()]
print(my_list5)
# 结果:['tom:18', 'jerry:19', 'ruiwen:18']

3、集合推导式

与列表推导式差不多一样,只不过是将[ ]换为{ }

my_dict = {"tom":"18","jerry":"19","ruiwen":"18"}
my_set = {k+":"+v for k,v in my_dict.items()}
print(my_set)
# 结果:{'ruiwen:18', 'tom:18', 'jerry:19'}

4、字典推导式

my_dict = {x:x for x in range(5)}
print(my_dict)
# 结果:{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

5、四种基本组合数据类型,列表、集合和字典都可以用推导式那么元组能不能呢?

答案:不能,pthon中,将( )用于了生成器

my_tuple = (x for x in range(10))
print(type(my_tuple))
# 结果:<generator object <genexpr> at 0x00000191B4F22CA8>
    <class 'generator'>

不过可以通过类型强制性转换,将生成器转换为对应的类型数据

print(tuple(my_tuple))
# 结果:(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
### Python 中元组推导式的用法与示例 #### 1. 基本定义 元组推导式是一种简洁的方式,用于从可迭代对象中生成满足特定条件的新元组。需要注意的是,**元组推导式实际上返回的是一个生成器对象**,而非真正的元组[^3]。为了将其转换为实际的元组,通常需要显式调用 `tuple()` 函数。 --- #### 2. 基础语法 元组推导式的通用形式如下: ```python (expression for variable in iterable) ``` 其中: - `expression` 表示要计算的表达式; - `variable` 是每次迭代时使用的变量名; - `iterable` 是任意可迭代对象(如列表、元组、字典等)。 如果需要加入条件筛选,则可以扩展为: ```python (expression for variable in iterable if condition) ``` --- #### 3. 示例代码 ##### 示例 1:基本元组推导式 以下是一个简单的例子,展示如何使用元组推导式生成偶数元组: ```python numbers = range(10) # 创建一个范围对象 even_numbers_gen = (x for x in numbers if x % 2 == 0) # 元组推导式生成器 print(even_numbers_gen) # 输出:<generator object <genexpr> at ...> even_numbers_tuple = tuple(even_numbers_gen) # 转换为元组 print(even_numbers_tuple) # 输出:(0, 2, 4, 6, 8) ``` ##### 示例 2:嵌套元组推导式 可以将元组推导式与其他推导式结合使用,例如在列表推导式中嵌套元组推导式: ```python numbers = range(5) squares_tuples = [(x, x**2) for x in numbers] # 列表推导式中嵌套元组 print(squares_tuples) # 输出:[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16)] ``` ##### 示例 3:复杂条件筛选 下面的例子展示了如何基于多个条件生成元组: ```python original_tuple = (233, 32, 57, 44, 83, 590, 651) filtered_generator = (x for x in original_tuple if x < 100 and x % 2 != 0) # 筛选小于100且奇数 filtered_tuple = tuple(filtered_generator) print(filtered_tuple) # 输出:(32, 57, 44, 83) ``` ##### 示例 4:遍历生成器对象 如果不立即转换为元组,也可以直接遍历生成器对象: ```python original_tuple = (233, 32, 57, 44, 83, 590, 651) filtered_generator = (x for x in original_tuple if x < 100) # 遍历并打印每个元素 for value in filtered_generator: print(value, end=" ") # 输出:32 57 44 83 # 尝试再次打印生成器内容 print("\n", tuple(filtered_generator)) # 输出:() ``` 注意:生成器对象是一次性的,在第一次完全消耗后无法重复使用[^4]。 --- #### 4. 特殊注意事项 - **生成器 vs 元组**:元组推导式本质上返回的是生成器对象,而不是元组。如果需要得到真实的元组,必须通过 `tuple()` 显式转换。 - **性能优化**:对于大规模数据处理场景,生成器相比一次性构建完整的元组更加节省内存资源[^3]。 --- ### 总结 元组推导式提供了一种高效的方法来生成符合条件的元组序列。它不仅可以单独使用,还可以灵活地嵌套到其他推导式中,从而实现更复杂的逻辑运算。不过需牢记,元组推导式的结果默认是生成器对象,必要时应手动转换为目标类型。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值