美文网首页
关于迭代

关于迭代

作者: 侃侃看看 | 来源:发表于2017-05-28 22:49 被阅读0次

关于迭代

定义:

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果,每一次对过程的重复称为一次迭代,而每一次的迭代得到的结果为下一次迭代的初始值

Python中的迭代

  • 好处:使用迭代可以提供某种流式的操作,占用内存少,拿读文件来说:
    对于一个文件而言,其操作为

      将文件读入内存
      处理内存中的数据
      释放内存关闭文件等操作
    

而一口气将文件读入内存,不仅耗时而且占用大量内存,所以,读一点处理一点的‘流式操作’比较好

  • 迭代器对象
    内部有iter()方法,对象的iter函数经调用之后会返回一个迭代器,里面包含具体数据获取的实现。

  • 可迭代的对象
    含有next方法或者next()方法,每次返回一个迭代的值,在正确范围内返回期待的数据以及超出范围后能够抛出StopIteration的错误停止迭代。

  • 生成器生成可迭代对象
    生成器:含有yeild的语句,生产期类似于迭代器,在某些类中,实现iter()函数,其中返回yeild,就就是一个可迭代对象

反向迭代

实现__reversed__()方法
class test(object):
def __init__(self,start,end,step = 0.1):
    self.start = start
    self.end = end
    self.step = step
def __iter__(self):
    i = self.start
    while i <= self.end:
        yield i
        i = i+self.step
def __reversed__(self):
    i = self.end
    while i >= self.start:
        yield i
        i = i-self.step

_test1 = test(1.0,4.0,0.2)
_test2 = test(1.0,4.0,0.5)
for i in _test1:
    print(i,end=',')
print("")
for i in reversed(_test2):
    print(i,end=',')

对迭代器切片

使用itertools下的islice方法
from itertools import islice

l=range(20)
t = iter(l)
for i in islice(t,5,10):
    print(i,end=",")
# 结果是5,6,7,8,9,10

for i in t:
    print(i,end=",")
#结果是 11,12,13,14,15,16,17,18,19
#说明迭代之后的就消耗了,要重新迭代必须重新生成迭代器才行

可迭代对象的连接

from itertools import chain
    for x in chain([1,2,3,4],['a','b','c'])
        print(x,end=',')
#结果是 1,2,3,4,a,b,c

示例代码

  • 使用collections模块中的Iterator和Iterable
    自己生成的模块中继承Iterator ,完成next()方法完成迭代器的定义
    继承Iterable,完成iter()方法,在这个方法中返回一个迭代器对象,这样,使用next或者for循环即可完成迭代的遍历

    示例:上网抓取城市气温情况:

      from collections import Iterable,Iterator
      import requests
      
      #生成迭代器
      class WeatherIterator(Iterator):
          def __init__(self,cities):
              self.cities = cities
              self.index = 0
          def getweather(self,city):
              r = requests.get("http://wthrcdn.etouch.cn/weather_mini?city="+city)
              data = r.json()['data']['forecast'][1]
              return city+"{},{}".format(data['high'],data['low'])
              #print(city+"{},{}".format(data['high'],data['low']))
          #关键函数
          def __next__(self):
              if self.index == len(self.cities):
                  raise StopIteration
              else:
                  city = self.cities[self.index]
                  self.index += 1
                  return self.getweather(city)
      #生成可迭代的对象
      class WeatherIterable(Iterable):
          def __init__(self,cities):
              self.cities = cities
          #关键函数
          def __iter__(self):
              return WeatherIterator(self.cities)
      
      test_weather=WeatherIterable(['北京','上海','广州','深圳','定西'])
      
      for i in test_weather:
          print(i)
    

    示例:求100之内的素数,使用生成器

      #-*- coding=utf-8 -*-
      #判断素数;除了1和它本身可以除
      class test(object):
      def __init__(self,start,end):
      self.start = start
      self.end = end
      def IsPrime(self,k):
      if k < 2:
      return False
      else:
      for i in range(2,k):
      if k % i == 0:
      return False
      return True
      def __iter__(self):
      for i in range(self.start,self.end):
      if self.IsPrime(i):
      yield i
      
      
      
      _test = test(1,100)
      
      for i in _test:
      print(i,end=',')
    

相关文章

  • 关于迭代

    关于迭代 定义: 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果,每一次对过程的重复称为一次迭代,而...

  • 关于迭代

    成败的逻辑其实并不简单。我们专栏第一季的第一讲,说的就是失败不是成功之母:因为人的特性都是不愿意直面自己的失败。我...

  • 关于快速迭代

    “快速决断的核心是舍弃”这是让我印象最深刻的一句话。 我们都需要有快速决断的能力,因为犹豫不决会让我们错失很多机会...

  • 关于消费迭代

    年轻人的消费观念相对于以往有很大的不同。70后比较注重节俭和储蓄,80后追求一定程度的个性化和高性价比。80后虽然...

  • 贾哲个人成长计划(201711-201811) #关于迭代#

    关于迭代的#贾哲成长计划(201711-201811) | 整体思路 查阅了百科,对于“迭代”一词的定义为:迭代是...

  • Scrum敏捷开发:迭代计划会议

    本文是关于Scrum敏捷开发中的迭代计划会议的总结。 在每个迭代的初期(第一天)需要召开迭代计划会议,目的在于...

  • 鱼C-python之迭代器

    给个很熟悉的例子 迭代就是循环的意思,用来循环的容器就是迭代器。 关于迭代器有2个内置函数,便是 iter() 和...

  • 敏捷项目如何保证测试质量

    关于敏捷项目,是迭代更新快,每个迭代都会有新的内容,或是业务需求,或是代码优化,我们身为测试,要在每个迭代的测试中...

  • ArrayList、CopyOnWriteArrayList读写

    1.关于ConcurrentModificationException和迭代器读写(ArrayList)a) fo...

  • 关于迭代的感悟

    要说移动互联网出现频率最高的词,快速迭代肯定是其中之一。之前对迭代的理解仅仅是快,甚至为了速度可以忽视一些细节问题...

网友评论

      本文标题:关于迭代

      本文链接:https://www.haomeiwen.com/subject/awzhfxtx.html