生成器
-
生成器是什么?用来干嘛?
需要知道怎么生成很多元素,但又不想生成的生成元素占用我的很多空间,但是需要生成的时候,它能给我生成
在Python中,这种一边循环一边计算的机制,称为生成器:generator -
怎么创建一个生成器呢?
生成式创建:
(i*i for i in list(range(1,11))) (生成式的[]改成())
函数式创建:
把函数的return关键字改成yield
但是执行顺序和函数不一样,函数遇到return返回,生成器遇到yield返回,返回的是可迭代对象,并且下一次从返回的yield的下面一句开始执行 -
如何读取生成器里面的结果?
用next(<生成式>)可以一个一个访问
用for去迭代得到
用while循环得到
while True: try:…
except StopIteration as e:
print(‘Generator return value:’, e.value)
break
迭代器生成器都不是很理解
练习
- 输出杨辉三角
#我要构成新列表,就要有两个原来那一列的。于是当奇数行生成式子的时候,用的是l2那个列表,偶数行用的是l1那个列表
def triangles(n):
l1 = []
l2 = []
for k in range(1,n+1,1) :
if k == 1 :
l1 = [1]
print(l1)
else :
if k%2 == 0 :
l2.append(0)
l2.append(0)
for i in range(len(l1)) :
l2[0] = 1
l2[-1] = 1
if i != 0 & i != len(l1) :
l2[i] = l1[i-1] +l1[i]
print(l2)
else :
l1.append(0)
l1.append(0)
for i in range(len(l2)):
l1[0] = 1
l1[-1] = 1
if i != 0 & i != len(l2):
l1[i] = l2[i - 1] + l2[i]
print(l1)
triangles(7)
#就是如果我不区分奇偶行,都是用上一行这样,怎么做?就想到了首尾补0,错位相加
def traiangle(n) :
l = [1]
l1 = []
l2 = []
k = 1
while k <= n :
l1 = l.copy()
l1.insert(0,0)
l2 = l.copy()
l2.append(0)
l.append(1)
for i in range(len(l)):
l[i] = l1[i] + l2[i]
k = k+1
print(l)
traiangle(7)
#就是想到了最近看的那个列表生产式,觉得可以更简洁一点
def traiangle(n) :
l = []
for k in range(n) :
l = [
l[i] + l[i+1] for i in range(len(l)-1)
]
l.insert(0,1)
l.append(1)
print(l)
traiangle(5)