#字典推导式
dic = {'a':10,'b':59}
r = [(k,v)for k,v in dic.items()]
s = [m for m in dic.items()] #items()返回的时元组形式
print(r,s)
#列表推导式
m = [x*x for x in range(10)]
print(m)
#将单词长度大于3的转为大写输出
names = ['bob','tom','alice','jerry','wendy','mary']
result = [x.upper() for x in names if len(x)>3]
print(result)
#求(x,y)其中x是0-5的偶数,y是0-5的奇数组成
num = range(6)
result = [(x,x+1) for x in range(6) if x%2==0]
print(result)
#求m中3,6,9组成的列表
m = [[1,2,3],[4,5,6],[7,8,9]]
result = [x[2] for x in m]
print(result)
#求m中斜线1,5,9组成的列表
result1 = [x[i] for i,x in enumerate(m) ]
result2 = [m[i][i]for i in range(len(m))]
print(result1,result2)
#求m,n中矩阵和元素的乘积
m = [[1,2,3],[4,5,6],[7,8,9]]
n = [[2,2,2],[3,3,3],[4,4,4]]
result5 = [m[row][col]*n[row][col] for row in range(3) for col in range(3)]
print(result5)
# myre = (x[2] for x in m)
#生成器:生成器可以被循环迭代,直到循环结束,但只能遍历一次,next(myre)或myre.__text__(),
#1.把(列表,字典,集合)推导式的[]和{}改成().
#2.将print或return换成yield,每到yield时就会停止并返回当前这个值,调用方法时没有结果,可以调用next()
'''特点:1.语法上和函数类似,都用def定义,但是生成器用yield语句返回一个值,而函数用return
2.自动实现迭代器协议,可以调用它的next方法,在没有值可以返回的时候,生成器自动产生
StopIteration异常,它也是迭代器
3.状态挂起:生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,
保留足够的信息,以便之后从它离开的地方继续执行'''
#迭代器:用iter(对象)可以将一个可迭代对象转成一个生成器,可以被next()调用的都为迭代器
def fun():
a,b= 0,1
while b<10:
print('yield开始---')
yield(a)
a,b = b,a+b
print('yield结束---')
f = fun()
print(f)
print(f.__next__())
print(f.__next__())
# print(f.__next__())
# print(f.__next__())
# print(next(f))
#自写迭代器:
class IterDemo:
def __init__(self,start=0,end=0):
self.start = start
self.end = end#照应下面---->下标 或 列表长度
def __iter__(self):
print('iter----')
return self
def __next__(self):
i = self.start
if self.start < self.end:#对应上面--->self.end 或 self.end-1
self.start += 1
return i
else:
raise StopIteration
test = IterDemo(0,5)
for i in test:
print(i)
推导和生成器
最新推荐文章于 2022-05-17 10:55:34 发布