列表/字典/集合解析式和生成器

本文深入探讨了Python中列表解析式的使用,包括其逻辑、条件应用及与字典、集合解析式和生成器的关系。通过实例展示了如何利用这些特性高效处理数据。

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

列表解析式

列表解析式是将一个列表(实际上适用于任何 可迭代对象(iterable) )转换成另一个列表的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。

a0=dict(zip(('a','b','c'),(1,2,3)))
a1=range(10)
a2=[i for i in a1 if i in a0]
print(a2)

以上代码打印的是一个空列表

 

我们来解释一下代码列表解析式运用的逻辑:

a0=dict(zip(('a','b','c'),(1,2,3)))
a1=range(10)
a2=[]
for i in a1:
    if i in a0:
        a2.append(i)
print(a2)

前面两个创建列表的方法等价,这时你就可以理解了列表解析式的基本运用了

 

这时还有一个问题,为什么打印的值为空呢?这是因为 if i in a0这个语句判断的是i是否在字典中,判断的是字典的key值而不是value值,所以不等价返回的是False

 

字典解析式

用于创建一个字典(可加条件语句或嵌套语句)

A1=range(10)
A2={i:i*8 for i in A1 if i>5}
print(A2)
#{6: 48, 7: 56, 8: 64, 9: 72}

字典的形式是{key,value},所以这里用的是花括号并传递key和value用冒号隔开

 

集合解析式

用于创建一个集合(可加条件语句或嵌套语句)

A1=range(10)
A2={i for i in A1 if i>5}
print(A2)
print(type(A2))
#{8, 9, 6, 7}
#<class 'set'>

注意集合的顺序是随机的

 

生成器

生成器是可迭代对象,可用list()转换成列表和循环遍历出值

有两种生成器创建方法:生成器表达式和生成器函数

生成器表达式

用于创建一个生成器(可加条件语句或嵌套语句)

A1=range(10)
A2=(x*2 for x in A1)
print(A2)
#<generator object <genexpr> at 0x007ED090>

 

 

生成器函数
def gen(n):
    for i in range(n):
        yield i*i
for item in gen(5):
    print(item)
# 0
# 1
# 4
# 9
# 16

这里用yield返回一个生成器

yield会一次返回一个结果,然后挂起,下次从挂起处继续执行,这能有效的减少内存损耗

如果是return就直接退出函数并返回一个值了

转载于:https://www.cnblogs.com/luocodes/p/10727019.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值