Python推导式

本文详细介绍了Python中的列表推导式、元组推导式、字典推导式和集合推导式的概念、语法以及使用方法,包括嵌套循环和条件筛选。
摘要由CSDN通过智能技术生成
Python推导式学习

列表推导式

[表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]

可以这样认为,它只是对 for 循环语句的格式做了一下简单的变形,并用 [] 括起来而已,只不过最大的不同之处在于,列表推导式最终会将循环过程中,计算表达式得到的一系列值组成一个列表。

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)

输出结果:
[0 , 1 , 4 , 9 , 16 , 25 , 36 , 49 , 64, 81]

不仅如此,我们还可以在列表推导式中添加 if 条件语句,这样列表推导式将只迭代那些符合条件的元素。例如:

b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)

输出结果:
[0 ,4 , 16, 36, 64]

当然,也支持类似于多层嵌套的 for 表达式,例如如下代码:

e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# e_list列表包含120个元素
print(e_list)

对于包含多个循环的 for 表达式,同样可指定 if 条件。

src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要x能整除y,就将它们配对在一起
result = [(x, y) for x in src_a for y in src_b if x % y == 0]
print(result)

输出结果:
[(30, 3), (30, 5), (12, 3), (66, 3), (66, 11), (39, 3), (78, 3), (36, 3), (57, 3), (121, 11)]

元组推导式

除了元组推导式是用 () 圆括号将各部分括起来,而列表推导式用的是 [],其它完全相同。不仅如此,元组推导式和列表推导式的用法也完全相同。

用元组推导式生成的结果并不是一个元组,而是一个生成器对象,这一点和列表推导式是不同的

如果我们想要使用元组推导式获得新元组或新元组中的元素,有以下三种方式:

  • 使用 tuple() 函数,可以直接将生成器对象转换成元组,例如:
a = (x for x in range(1,10))
print(tuple(a))

运行结果为:
(1, 2, 3, 4, 5, 6, 7, 8, 9)
  • 直接使用 for 循环遍历生成器对象,可以获得各个元素,例如:
a = (x for x in range(1,10))
for i in a:
    print(i,end=' ')
print(tuple(a))

输出结果:
1 2 3 4 5 6 7 8 9 ()
  • 使用 __next__() 方法遍历生成器对象,也可以获得各个元素,例如:
a = (x for x in range(3))
print(a.__next__())
print(a.__next__())
print(a.__next__())
a = tuple(a)
print("转换后的元组:",a)

输出结果:
0
1
2
转换后的元组: ()

无论是使用 for 循环遍历生成器对象,还是使用 __next__() 方法遍历生成器对象,遍历后原生成器对象将不复存在,这就是遍历后转换原生成器对象却得到空元组的原因。

字典推导式

语法形式

{表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]}

可以看到,和其它推导式的语法格式相比,唯一不同在于,字典推导式用的是大括号{}

使用 if 表达式筛选符合条件的键值对。

olddict={'Jack': 4, 'Tom': 3}
newdict = {v: k for k, v in olddict.items() if v>3}
print(newdict)

输出结果:
{4: 'Jack'}

集合推导式

集合推导式的语法格式和字典推导式完全相同,如下所示:

{ 表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] }

既然生成的是集合,那么其保存的元素必须是唯一的。

tupledemo = (1,1,2,3,4,5,6,6)
setnew = {x**2 for x in tupledemo if x%2==0}
print(setnew)

输出结果:
{16, 4, 36}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值