python中的推导式和生成式

推导式用途:

对一个列表(集合,字典)根据条件进行循环遍历,把符合条件的筛选出来并生成新的列表(集合,字典)。括号内可以写for循环和if-else并且可以多层嵌套for、if,甚至可以在里面再嵌套一个推导式

列表推导式:

中括号内写入for循环,对一个列表进行遍历,然后写一个if条件判断,对每次循环取出的值进行判断,结果为True的话将当前遍历到的值写入到新生成的列表中。

str1 = ['aaaa', 'bbb', 'cccc', 'ddd', 'eee', 'ffff', 'ggggg']
formula1 = [str2 for str2 in str1 if len(str2) >= 4]  # 循环遍历str列表,通过if表达式判断把通过的值赋给新的列表
print(formula1)
formula2 = [str2.upper() for str2 in str1 if len(str2) >= 4]  # 把列表中长度大于等于4的元素取出并转换为大写
print(formula2)
生成100以内质数
内层嵌套推导式生成所有的非质数
formula3 = [x for x in range(2, 101) if not [y for y in range(2, x) if x % y == 0]]
print(formula3)

集合推导式:

集合推导式使用的是花括号,用法和列表推导式一样

str1 = ['aaaa', 'bbb', 'cccc', 'ddd', 'eee', 'ffff', 'ggggg']
formula = {str2 for str2 in str1 if len(str2) >= 4}
print(formula)

字典推导式:

字典推导式和集合推导式一样使用花括号,区别是字典推导式同时取出键和值,中间用冒号分开。还要注意字典要使用items()函数,该函数将字典的键和值以列表方式返回

dict1 = {
    'name': 'zhangsan',
    'age': 18,
    'sex': 'man',
}
formula = {key: value for key, value in dict1.items() if key == 'name'}
print(formula)

生成式:

元组推导式又叫生成式。生成式是按照一个规则生成一个迭代器。语法和推导式类似,不同的是生成式用小括号,并且规则可以写成一个函数。
生成式返回的结果不可以直接打印,需要使用__next__()方法或者next(),每使用一次生成一个值,调用次数不能超过存量,不然会报错。
注意:同时调用两种方法效果是相互叠加的,比如用__next__()方法返回1,再用next()方法返回的不是1,是继续__next__()的下一个值2。

y = (x for x in range(100) if x % 2 == 0)
for i in range(25):
    print(y.__next__()) #打印2
    print(next(y)) #打印3

使用函数完成生成式,这里的yield是一个关键字,作用是返回一个值并暂停。我们可以看出来当实例化num()方法时,就是在调用num()方法,方法一直在运行,只是yield关键字使其进入阻塞状态,当使用next()调用时,方法进入cpu运行,当再次执行到yield语句时,再次进入阻塞状态

def num():  # 生成质数的生成器
    x = 0
    while True:
        x += 1
        n = 0
        for i in range(1, x + 1):
            if x % i == 0:
                n += 1
        if n == 2:
            yield x
g = num()  # 实例化对象,g就是生成器
for i in range(20):
    print(next(g))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值