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的推导模式和迭代器的主要内容,如果未能解决你的问题,请参考以下文章

python 推导式和迭代器生成器

生成器; 推导式

流畅的python第十四章可迭代的对象,迭代器和生成器学习记录

python 迭代器 生成器 列表推导式

Python 推导式迭代器生成器模块和包

迭代器和迭代对象 生成器 推导式