Pythond的推导模式和迭代器
Posted 潜水闲鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pythond的推导模式和迭代器相关的知识,希望对你有一定的参考价值。
一、推导式是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‘]
【字典推导式】
字典和集合推导式是该思想的延续,语法差不多,只不过产生的是集合和字典而已。
代码如下:
strings = [‘a‘,‘is‘,‘b‘,‘if‘,‘c‘,‘else‘]
D = {k: v for k,v in enumerate(strings)}
print( D)
【集合推导式】
集合推导式跟列表推导式非常相似,唯一区别在于用{}代替[]
代码如下:
strings = [‘a‘,‘is‘,‘with‘,‘if‘,‘file‘,‘exception‘]
a= {len(s) for s in strings} #有长度相同的会只留一个,这在实际上也非常有用
pirnt(a)
输出:1, 2, 4, 9
【嵌套列表推导式】
嵌套列表是指列表中嵌套列表
m=[[1,2,3],[4,5,6],[7,8,9]]
n=[[2,2,4],[3,2,1],[2,2,1]]
a=[[m[i][j]*n[i][j] for i in range(len(m))] for j in range(len(m))]
print(a)
输出:[[2, 12, 14], [4, 10, 16], [12, 6, 9]]
二、迭代器
迭代器仅是一容器对象,它实现了迭代器协议。它有两个基本方法:
1)__next__()方法
返回容器的下一个元素
2)__iter__()方法
返回迭代器自身
注意:迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
三、生成器
第一种方式:将列表的[]改为(),里面可以写推导
生成器只要调用next()方法即可得到下一个值,到最后一个后异常(StopIteration)退出
用表达式做生成器
例:
test=(x for x in rang(10))
next(test)或test.__next__()
第二种方式:
通过裴波那切序列:将print换成yield,每次生成一个值
但是调用方法时没有结果
在方法内使用yield做生成器,这样调用此方法时,会得出一个结果
然后也是可以调用next()
每到yield时,就会停止,返回当前这个值,可以一次一次next()调用
生成器可以被循环迭代,直到循环结束
以上是关于Pythond的推导模式和迭代器的主要内容,如果未能解决你的问题,请参考以下文章