python第11课,生成列表式 生成器,迭代器,异常

#列表生成式
# 是python内置的简单却强大的可以用来创建list的生成式
#例如要生成[1,2,3,4,5,6,7,8,9] 可以用list(range(1,10))
print(list(range(1,10)))
#要生成[1*1,2*2,3*3,4*4...10*10]循环的方法
l=[]
for x in range(1,11):
    l.append(x*x)
print(l)
#但是循环太繁琐,如果用列表生成式
print([x*x for x in range(1,11)])  #生成式元素放在前边,后边跟for循环
#for循环后还可以加上if判断,如筛选出仅偶数的平方
print([x*x for x in range(1,11) if x%2==0])
# 还可以使用两层循环,可以生成全排列:
print([m+n for m in range(1,4) for n in range(4,8)])
#利用列表生成式可以写出很简洁的代码,例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:
import os
print([d for d in os.listdir('.')])
#for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:
d={'x':'a','y':'b','z':'c'}
for k,v in d.items():
    print(k,'=',v)
#所以,列表生成式也可以使用两个变量来生成list
d={'x':'a','y':'b','z':'c'}
print([k+'='+v for k,v,in d.items()])
#最后把一个list中所有的字符串变成小写
l=['Hello', 'Word','IMB','Apple']
print([d.lower() for d in l])


#生成器
#通过列表生成式,我们可以直接创建列表。但是,受到内存限制,
# 列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的内存空间,而且,如果仅用前面几个元素的话,那后面的元素都拜拜浪费了
# 所以,列表如果可以按照某种算法推算出来,那我们在循环中能否不断地推出后续的元素呢
# 这样就不必创建完整的list,从而节省大量的空间,在python中,这样一边循环一边计算的机制,称为生成器:generator
#要创建一个genrator,有很多种办法,第一种方法很简单,只
# 要把一个列表生成式[]改成(),就创建了一个生成器
l=[x*x for x in range(10)]
print(l)
g=(x*x for x in range(10))
print(g)
#l为一个list,g为一个generator,list元素可以直接打印,generator
#怎么打印呢?可以通过next()函数获取generator的下一个返回值
print(next(g))
print(next(g))
print(next(g))
print(next(g))
#generator保存的是算法,每次调用next(g),就计算出下一个元素的值,知道计算到最后一个元素,没
#有最后一个元素时,抛出sopIteration的错误
# 当然,上面这种不断调用next(g)的方法是在是太变态了,正确的方法是使用for循环,因为generator也是可迭代的
g=(x*x for x in range(10))
for n in g:
    print(n)
#所以,我们创建了一个generator后,基本上不用调用next()函数,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值