您好,登錄后才能下訂單哦!
這篇文章主要講解了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反方向迭代一個序列的方法有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。