迭代求斐波那契数列python_python中的迭代器(以斐波那契数列为主讲解)
簡要引入:
迭代一詞,我們再熟悉不過了,它經常出現在算法中,在數學中也有很多的使用,比如一個算法經過多少次的迭代,執行的效率有了很大的提高……
迭代的意思類似于循環,每一次重復的過程被稱為一次迭代的過程,而每一次迭代出現的結果將作為下一次迭代的初始值。
迭代器:提供迭代方法的容器。
如: ? ?序列(列表、元祖、字符串),字典
練習1#for循環來進行迭代In?[2]:?for?i?in?"Python":
...:?????print(i)
...:
P
y
t
h
o
n
注:字符串是一個容器,也是一個迭代器,for語句能使得迭代器的功能以輸出到控制臺的方式實現,每一次從此容器中依次取出一個數據,這就是迭代操作。(字典、文件同樣支持迭代)
練習2In?[2]:?dic1?=?{'name':'xiaodong','sex':'male','love_language':'Python','love_quotes':'Life?is?short.?You?need?Python.'}
In?[3]:?for?dic?in?dic1:
...:?????print('%s?----?%s'%(dic,?dic1[dic]))#%s字符串格式化的一種
...:
name?----?xiaodong
sex?----?male
love_language?----?Python
love_quotes?----?Life?is?short.?You?need?Python.python中關于迭代器的2個BIF(Built-in Functions,內置函數)iter() ?-----調用iter()得到與之對應的迭代器
next() ?-----調用此方法,迭代器返回下一個值
StopIteration異常:迭代器沒有值返回時,Python會拋出此異常,結束操作
練習3In?[4]:?str1?=?"Python"In?[5]:?iter1?=?iter(str1)
In?[6]:?next(iter1)
Out[6]:?'P'In?[7]:?next(iter1)
Out[7]:?'y'In?[8]:?next(iter1)
Out[8]:?'t'In?[9]:?next(iter1)
Out[9]:?'h'In?[10]:?next(iter1)
Out[10]:?'o'In?[11]:?next(iter1)
Out[11]:?'n'#最后拋出異常結束如下所示:In?[12]:?next(iter1)
---------------------------------------------------------------------------
StopIteration?????????????????????????????Traceback?(most?recent?call?last)
?in?()
---->?1?next(iter1)
StopIteration:
原理如下:In?[13]:?str1?=?"Python"In?[14]:?iter1?=?iter(str1)
In?[15]:?while?True:
...:?????try:
...:?????????each?=?next(iter1)
...:?????except?StopIteration:
...:?????????break
...:?????print(each)
...:
P
y
t
h
o
n方法實現__iter()__
__next()__
迭代器必須實現__iter__()的方法,因為通過此方法才能返回迭代器本身。除此之外,還需要重寫__next__()方法,用此方法可以使得迭代器按照我們自己定義的規則進行迭代。
斐波那契數列In?[1]:?class?Fibonacci:
...:?????def?__init__(self,n?=?10):#n=10是一個范圍
...:?????????self.a?=?0
...:?????????self.b?=?1
...:?????????self.n?=?n
...:?????def?__iter__(self):??#返回迭代器本身
...:?????????return?self
...:?????def?__next__(self):
...:?????????self.a,?self.b?=?self.b,?self.a?+?self.b
...:?????????if?self.a?>?self.n:??#判斷是否還有下一個輸出,如果沒有則拋出異常
...:?????????????raise?StopIteration
...:?????????return?self.a
In?[2]:?fibonaccis?=?Fibonacci()#類的實例化In?[3]:?for?fibonacci?in?fibonaccis:??#迭代生成此數列
...:?????print(fibonacci,end='?')?#end='?'可以理解為循環打印時不換行,以空格分開
...:
1?1?2?3?5?8
作者:日堯_dong
鏈接:https://www.jianshu.com/p/fd4a3348ea8c
總結
以上是生活随笔為你收集整理的迭代求斐波那契数列python_python中的迭代器(以斐波那契数列为主讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么小米手机不在美国卖?看完原因对雷军
- 下一篇: 联想 ThinkBook 随行能量卡 G