Python 如何反方向迭代一個序列
問題
你想反方向迭代一個序列
解決方案
使用內置的 reversed() 函數,比如:
>>> a = [1, 2, 3, 4]>>> for x in reversed(a):... print(x)...4321
反向迭代僅僅當對象的大小可預先確定或者對象實現了 __reversed__() 的特殊方法時才能生效。如果兩者都不符合,那你必須先將對象轉換為一個列表才行,比如:
# Print a file backwardsf = 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 += 1for rr in reversed(Countdown(30)): print(rr)for rr in Countdown(30): print(rr)
定義一個反向迭代器可以使得代碼非常的高效,因為它不再需要將數據填充到一個列表中然后再去反向迭代這個列表。
以上就是Python 如何反方向迭代一個序列的詳細內容,更多關于Python 反向迭代的資料請關注好吧啦網其它相關文章!
相關文章: