Python 如何反方向迭代一個序列
問題
你想反方向迭代一個序列
解決方案
使用內置的 reversed() 函數,比如:
>>> a = [1, 2, 3, 4] >>> for x in reversed(a): ... print(x) ... 4 3 2 1
反向迭代僅僅當對象的大小可預先確定或者對象實現了 __reversed__() 的特殊方法時才能生效。如果兩者都不符合,那你必須先將對象轉換為一個列表才行,比如:
# Print a file backwards f = open('somefile') for line in reversed(list(f)): print(line, end='')
要注意的是如果可迭代對象元素很多的話,將其預先轉換為一個列表要消耗大量的內存。
討論
很多程序員并不知道可以通過在自定義類上實現 __reversed__() 方法來實現反向迭代。比如:
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 += 1 for rr in reversed(Countdown(30)): print(rr) for rr in Countdown(30): print(rr)
定義一個反向迭代器可以使得代碼非常的高效,因為它不再需要將數據填充到一個列表中然后再去反向迭代這個列表。
以上就是Python 如何反方向迭代一個序列的詳細內容,更多關于Python 反向迭代的資料請關注腳本之家其它相關文章!
相關文章
單步調試 step into/step out/step over 區(qū)
這篇文章主要介紹了單步調試 step into/step out/step over 區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11教你使用conda虛擬環(huán)境管理(創(chuàng)建、激活、重命名、刪除虛擬環(huán)境)
conda是一個強大的Python包管理和環(huán)境管理工具,它可以幫助我們輕松地安裝、更新、卸載和切換不同版本的Python和各種第三方庫,本文就來介紹一下conda虛擬環(huán)境管理(創(chuàng)建、激活、重命名、刪除虛擬環(huán)境),感興趣的可以了解一下2024-01-01