python217_day18-迭代器和生成器


由可迭代对象调用lter方法叫做迭代器,或者迭代对象
迭代器协议:只能往后走不能往前去。

l=[1,2,3,4,5]
iter_s=l.__iter__()//生成可迭代对象
print(iter_s)
print(iter_s.__next__())
print(iter_s.__next__())
print(iter_s.__next__())
print(iter_s.__next__())
print(iter_s.__next__())
结果:
<list_iterator object at 0x00FD5B30>
1
2
3
4
5
//内置函数next()
li=list("hellow")
iter_l=li.__iter__()//这个相当于内存地址。
print(next(iter_l))
print(next(iter_l))
print(next(iter_l))
print(next(iter_l))
结果:
h
e
l
l
基本和上面的一样

//生成器:就是可迭代对象

//三元表达式。

name="alex"
res= "SB" if name =="alex" else "帅哥"
print(res)
结果:SB ,把等式成立的结果放在前面。


列表解析:
方法一非列表解析:
egg_list=[]
for i in range(10):
    egg_list.append("鸡蛋%s" %i)
print(egg_list)
结果:
['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']

方法二列表解析:
举例:字符串拼接:
res=[i for i in  range(10)]
print(res)
结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

res=["鸡蛋%s" %i for i in  range(10)]
print(res)
结果:
['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4', '鸡蛋5', '鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9']
//三元表达式中,"鸡蛋%s" %i其中的i是第一个元 for i in  range(1,11)是第二个语句元素,if i <5这个是第三个
res=["鸡蛋%s" %i for i in  range(1,11) if i <5]
print(res)
结果:
['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4']
注:通过列表解析存储的文件是放在内存里面,如果数据太大的情况则会出现问题。
上面的是用列表类型的,并不是可迭代对象,要用(),才可以进行迭代操作。
把列表解析中的[]换成()就可以
//迭代操作
an_s=(1,2,3,4,5)
res=("鸡蛋%s" %i for i in  range(1,11) )
print(next(res))
print(next(res))
print(next(res))
print(next(res))
结果:
鸡蛋1
鸡蛋2
鸡蛋3
鸡蛋4
//如果利用列表解析这样的情况会出现占用内存过大,因此利用迭代器,这样占据的内存就少了。
res=(i for i in range(10000))
print(sum (res))
这样做的话就是只是计算慢并不会卡。

猜你喜欢

转载自blog.csdn.net/qq_37431752/article/details/87564651
今日推荐