Python 如何反方向迭代一個(gè)序列
問題
你想反方向迭代一個(gè)序列
解決方案
使用內(nèi)置的 reversed() 函數(shù),比如:
>>> a = [1, 2, 3, 4]>>> for x in reversed(a):... print(x)...4321
反向迭代僅僅當(dāng)對(duì)象的大小可預(yù)先確定或者對(duì)象實(shí)現(xiàn)了 __reversed__() 的特殊方法時(shí)才能生效。如果兩者都不符合,那你必須先將對(duì)象轉(zhuǎn)換為一個(gè)列表才行,比如:
# Print a file backwardsf = open(’somefile’)for line in reversed(list(f)): print(line, end=’’)
要注意的是如果可迭代對(duì)象元素很多的話,將其預(yù)先轉(zhuǎn)換為一個(gè)列表要消耗大量的內(nèi)存。
討論
很多程序員并不知道可以通過在自定義類上實(shí)現(xiàn) __reversed__() 方法來實(shí)現(xiàn)反向迭代。比如:
class Countdown: def __init__(self, start): self.start = start # Forward iterator def __iter__(self): n = self.start while n > 0: yield n n -= 1 # Reverse iterator def __reversed__(self): n = 1 while n <= self.start: yield n n += 1for rr in reversed(Countdown(30)): print(rr)for rr in Countdown(30): print(rr)
定義一個(gè)反向迭代器可以使得代碼非常的高效,因?yàn)樗辉傩枰獙?shù)據(jù)填充到一個(gè)列表中然后再去反向迭代這個(gè)列表。
以上就是Python 如何反方向迭代一個(gè)序列的詳細(xì)內(nèi)容,更多關(guān)于Python 反向迭代的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 概述IE和SQL2k開發(fā)一個(gè)XML聊天程序2. 利用CSS3新特性創(chuàng)建透明邊框三角3. HTML <!DOCTYPE> 標(biāo)簽4. XML入門的常見問題(二)5. CSS3實(shí)例分享之多重背景的實(shí)現(xiàn)(Multiple backgrounds)6. HTML5 Canvas繪制圖形從入門到精通7. XML入門精解之結(jié)構(gòu)與語法8. 存儲(chǔ)于xml中需要的HTML轉(zhuǎn)義代碼9. HTML DOM setInterval和clearInterval方法案例詳解10. XML入門的常見問題(一)
