python倒序函数,python迭代器详解

  python倒序函数,python迭代器详解

  首先,实现可重复对象和可重复对象的方法

  1.从可重复对象中获取迭代器对象。

  例如,L是一个可重复的对象,而ITER(L)是一个迭代器对象。

  在[1]中:l=[ 1,2,3,4 ]

  在[2]中:l.__iter__

  Out[2]:

  在[3]中:t=ITER(L))

  In [4]: t.next(

  Out[4]: 1

  In [5]: t.next(

  Out[5]: 2

  In [6]: t.next(

  Out[6]: 3

  In [7]: t.next(

  Out[7]: 4

  In [8]: t.next(

  请参考。

  静态跟踪(mostrecentcalllast))。

  回车())。

  - 1 t.next()).

  停止标识:

  对于l中的x:

  打印x

  for循环的工作流程是ITER(L)先获取一个T,然后一个接一个地调用t.nex,捕捉StopIteration,结束迭代。

  #直接调用以下函数的方法在数据量较大的情况下对网络IO要求较高,所以也可以采用迭代器的方法。

  defGetweather(城市) :

  r=requests . get(u http://wthr cdn.etouch.cn/weather _迷你?city= city)

  data=r.json()(数据))(预测))0))).

  返回“%s:%s,% s“%(city,data[low],data[high])))))).)

  打印网关(北京))。

  返回值:

  北京:低温13,高温28

  实现iterator对象的天气迭代器,下一个方法每次返回城市温度。

  实现一个可重复的对象WeaiterrIterable,迭代器方法返回一个迭代器对象。

  #-*-编码:utf-8-*-

  导入请求

  从集合导入可迭代的,迭代器

  Classweatheriterator(迭代器):

  def __init__(self,cities):

  self.cities=城市

  self.index=0

  defGetweather(自己,城市) :

  r=requests . get(u http://wthr cdn.etouch.cn/weather _迷你?city= city)

  data=r.json()(数据))(预测))0))).

  返回“%s:%s,% s“%(city,data[low],data[high])))))).)

  defnext(self):

  ifself.index==Len(self.cities):

  提升停止迭代

  city=self . city[self . index]

  self.index=1

  return self.getWeather(城市)

  classweatheriterable(iterable):

  def __init__(self,cities):

  self.cities=城市

  def __iter__(self):

  returnweatheriater(self . cities).

  Xinweatheriterable ([U 北京,U 上海,U 广州,U 深圳]):

  printx.encode(utf-8).

  输出:

  北京:低温13,高温28

  上海:低温14,高温22

  广州:低温17,高温23

  深圳:低温18,高温24

  第二,利用生成器函数实现可重复对象

  1.实现一类可重复对象,可以重复给定范围内的所有素数。

  素数定义为大于1的自然数,不再有1等因子的数称为素数。

  带yield的函数是生成器。与普通的函数不同,生成器看起来像一个函数调用,但函数代码在正确之前不会被执行。

  它调用next () (next()将在for循环中自动调用)。虽然执行流还是按照函数流执行,但是每执行一条yield语句就会被中断,返回一个迭代值。下一次执行将从下一个yield语句继续。看起来好像一个函数在正常执行过程中被yield中断了几次,每次中断都会通过yield返回当前的迭代值。

  类别质数:

  def __init__(self,start,end):

  self.start=开始

  self.end=结束

  def isPrimeNum(self,k):

  如果k 2:

  返回False

  对于xrange(2,k)中的I:

  如果k % i==0:

  返回False

  返回True

  def __iter__(self):

  对于xrange中的k(self . start,self.end 1):

  if self.isPrimeNum(k):

  产量k

  对于素数(1,10)中的x:

  打印x

  输出:

  2

  三

  五

  七

  第三,实现反向迭代。

  1.反向迭代。

  比如实现一个浮点数生成器FloatRange(类似于xrange)根据给定的范围(开始,结束)和步长值(步长)生成一系列连续的浮点数。例如,迭代FloatRange(3.0,4.0,0.2)可以生成一个序列:

  正向:3.0-3.2-3.4-3.6-3.8-4.0

  反向:4.0-3.8-3.6-3.4-3.2-3.0

  浮动等级:

  def __init__(self,start,end,step=0.1):

  self.start=开始

  self.end=结束

  self.step=步骤

  def __iter__(self):

  t=自我启动

  while round(t,14)=round(self.end,14):

  产量测试

  t=t自我步骤

  def __reversed__(自身):

  t=自我. end

  while round(t,14)=round(self.start,14):

  产量测试

  t=t -自我.步

  对于反转的x(float range(3.0,4.0,0.2)):

  打印x

  输出:

  4.0

  3.8

  3.6

  3.4

  3.2

  3.0

  对于浮点型(3.0,4.0,0.2)中的x:

  打印x

  输出:

  3.0

  3.2

  3.4

  3.6

  3.8

  4.0

  上面的代码使用round函数是因为浮点数比较有精度问题,所以需要四舍五入。

  2.切片迭代器

  比如你有一个文本文件,想读取某个范围的内容,比如100到300行之间的内容,而文本文件在python中是一个迭代对象,是否可以用类似列表切片的方式得到一个100-300行的文件内容生成器?

  使用标准库中的itertools.islice,它可以返回迭代对象切片的生成器。

  f=打开(/var/log/dmesg )

  从itertools导入islice

  #将文件内容分割为100到300行,它返回一个生成器对象。默认直径为1。

  伊斯利斯(100,300荷兰盾)

  #前500行内容

  伊斯利斯(500荷兰盾)

  # 100行结束内容

  伊斯利斯(f,100,无)

  Ps:每次使用islice都要重新申请对象,这样会消耗掉原来迭代的对象。

  四。迭代多个对象

  1.在for语句中迭代多个可迭代对象

  1.一类学生的语文、数学、英语的考试成绩分别存储在三个列表中,同时迭代三个列表,计算三个学生的总成绩(并行)。

  2.某年级有四个班。某次考试各班英语成绩存储在四个列表中,依次迭代每个列表,统计全学年英语成绩高于90分的人数(连载)

  解决方案:

  并行性:使用内置函数zip,可以合并多个迭代对象,每次迭代返回一个元组。

  从随机导入randint

  chinese=[randint(60,100) for _ in xrange(40)]

  math=[randint(60,100) for _ in xrange(40)]

  english=[randint(60,100) for _ in xrange(40)]

  总计=[]

  对于zip中的c、m、e(中文、数学、英语):

  总计.追加(c m e)

  打印总计

  输出:

  [204, 227, 238, 201, 227, 205, 251, 274, 210, 242, 220, 239, 237, 207, 230, 267, 263, 240, 247, 249, 255, 268, 209, 270, 259, 251, 245, 262, 234, 221, 236, 250, 251, 249, 242, 255, 232, 272, 237, 253]

  标准库中的Serial: itertools.chain可以连接多个迭代对象。

  从随机导入randint

  从itertools导入链

  class1=[randint(60,100) for _ in xrange(40)]

  class2=[randint(60,100) for _ in xrange(42)]

  class3=[randint(60,100) for _ in xrange(39)]

  [randint(60,100) for _ in xrange(43)]

  计数=0

  对于链中的(类别1、类别2、类别3、类别4):

  如果s 90:

  计数=计数1

  打印计数

  输出:

  38

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: