一、推导式是Python中很强大的、很受欢迎的特性,具有语言简洁,速度快等优点,并且多以[]为推导标志。推导式包括:
1.列表推导式
2.字典推导式
3.集合推导式
嵌套列表推导式
【列表推导式】
列表推导能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形
例如代码如下:
names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
print( [name.upper() for name in names if len(name)>3])
输出: ['ALICE', 'JERRY', 'WENDY', 'SMITH']
【字典推导式】
字典和集合推导式是该思想的延续,语法差不多,只不过产生的是集合和字典而已。
代码如下:
mcase = {'a':10,'b':44}
mcase_input = {k:v for k,v in mcase.items()}
print(mcase_input)
【集合推导式】
集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]
代码如下:
print(squared)
#列表
print(squared)
【嵌套列表推导式】
嵌套列表是指列表中嵌套列
m = [[1,2,3],[4,5,6],[7,8,9]] n = [[2,2,2],[3,3,3],[4,4,4]] list = [[m[i][0]*n[i][0],m[i][1]*n[i][1],m[i][2]*n[i][2]] for i in range(len(m))] print(list) l1 = [[ m[row][col]*n[row][col]for col in range(3)] for row in range(3)] print(l1)
二、迭代器
迭代器仅是一容器对象,它实现了迭代器协议。它有两个基本方法:
1)__next__()方法
返回容器的下一个元素
2)__iter__()方法
返回迭代器自身
注意:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
三、生成器
生成器只要调用next()方法即可得到下一个值,到最后一个后异常(StopIteration)退出
用表达式做生成器
例:
class IteratorDemo:
def __init__(self,start=0,end=0):
self.start=start
self.end=end
def __iter__(self):
return self#返回自己对象本身
def __next__(self):
#得到当前的指针start,让start位移
if self.start<self.end:
i=self.start#当前的下标
self.start+=1#获取下一次的下标
return i
else:
raise StopIteration()
第二种方式:
通过裴波那切序列:将print换成yield,每次生成一个值
但是调用方法时没有结果
在方法内使用yield做生成器,这样调用此方法时,会得出一个结果
然后也是可以调用next()
每到yield时,就会停止,返回当前这个值,可以一次一次next()调用
生成器可以被循环迭代,直到循环结束
a=b=1
print(a)
print(b)
for i in range(7):
yield (a+b)
a,b=b,a+b
f=feibonaqie()
for i in f:
print(i)