Python 如何反方向迭代一個(gè)序列
問(wèn)題
你想反方向迭代一個(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)存。
討論
很多程序員并不知道可以通過(guò)在自定義類上實(shí)現(xiàn) __reversed__() 方法來(lái)實(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. 使用EF Code First搭建簡(jiǎn)易ASP.NET MVC網(wǎng)站并允許數(shù)據(jù)庫(kù)遷移2. 使用PHP實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)可視化功能的示例詳解3. Python從文件中讀取數(shù)據(jù)的方法步驟4. XMLHTTP下載遠(yuǎn)程數(shù)據(jù)輸出到瀏覽器5. PHP擴(kuò)展類型及安裝方式解析6. Python pygame實(shí)現(xiàn)中國(guó)象棋單機(jī)版源碼7. 如何在瀏覽器端加密——使用Javascript加密解密8. PHP對(duì)文本數(shù)據(jù)庫(kù)的基本操作方法9. Vue父組件向子組件傳值以及data和props的區(qū)別詳解10. 基于JavaScript實(shí)現(xiàn)留言板功能
