zoukankan      html  css  js  c++  java
  • 迭代器应用场景1---斐波那契

    1,for循环

     1 nums = list()
     2 
     3 a = 0
     4 b = 1
     5 i = 0
     6 
     7 while i<10:
     8     nums.append(a)
     9     a,b = b,a+b
    10     i += 1
    11 
    12 for num in nums:
    13     print(num)

    除了for循环能接受可迭代对象,list、tuple等也能接收

    1 a = (11,22,33)
    2 # list() 不是简单的类型转换 是迭代的方式在a里面取值,重新生成列表 然后append()到列表中
    3 #用tuple()转换的时候也一样用到迭代器
    4 b = list(a)
    5 print(b)

    2.class

     1 class Feibonacci():
     2     def __init__(self,all_num):
     3         self.all_num = all_num
     4         self.a = 0
     5         self.b = 1
     6         self.current_num = 0
     7 
     8     def __iter__(self):
     9         return self
    10 
    11 
    12     def __next__(self):
    13         if self.current_num < self.all_num:
    14             ret = self.a    # ? 能理解,但想不到用这种方法
    15             self.a,self.b = self.b,self.a+self.b
    16             self.current_num += 1
    17             return ret
    18         else:
    19             raise StopIteration
    20 
    21 febo = Feibonacci(10)
    22 
    23 for num in febo:
    24     print(num)

    3.我能理解的class迭代器方式

     1 class Feibonacci():
     2     def __init__(self,all_num):
     3         self.all_num = all_num
     4         self.a = 0
     5         self.b = 1
     6         self.nums = list()
     7         self.current_num = 0
     8 
     9     def __iter__(self):
    10         return self
    11 
    12 
    13     def __next__(self):
    14         if self.current_num < self.all_num:
    15             self.nums.append(self.a)
    16             self.a,self.b = self.b,self.a+self.b
    17             ret = self.nums[self.current_num]
    18             self.current_num += 1
    19             return ret
    20         else:
    21             raise StopIteration
    22 
    23 febo = Feibonacci(10)
    24 
    25 for num in febo:
    26     print(num)
  • 相关阅读:
    BZOJ3483 : SGU505 Prefixes and suffixes(询问在线版)
    BZOJ3067 : Hyperdrome
    BZOJ3461 : Jry的时间表
    BZOJ3024 : [Balkan2012]balls
    BZOJ1111 : [POI2007]四进制的天平Wag
    BZOJ1107 : [POI2007]驾驶考试egz
    BZOJ1109 : [POI2007]堆积木Klo
    BZOJ4158 : [POI2007]Railway
    BZOJ1110 : [POI2007]砝码Odw
    BZOJ1105 : [POI2007]石头花园SKA
  • 原文地址:https://www.cnblogs.com/yifengs/p/11392711.html
Copyright © 2011-2022 走看看