Python 如何反方向迭代一個(gè)序列
問題
你想反方向迭代一個(gè)序列
解決方案
使用內(nèi)置的 reversed() 函數(shù),比如:
>>> a = [1, 2, 3, 4] >>> for x in reversed(a): ... print(x) ... 4 3 2 1
反向迭代僅僅當(dāng)對(duì)象的大小可預(yù)先確定或者對(duì)象實(shí)現(xiàn)了 __reversed__() 的特殊方法時(shí)才能生效。如果兩者都不符合,那你必須先將對(duì)象轉(zhuǎn)換為一個(gè)列表才行,比如:
# Print a file backwards
f = 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 += 1
for 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)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實(shí)現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實(shí)例
下面小編就為大家?guī)硪黄狿ython實(shí)現(xiàn)將數(shù)據(jù)庫一鍵導(dǎo)出為Excel表格的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-12-12
Keras搭建Mask?R-CNN實(shí)例分割平臺(tái)實(shí)現(xiàn)源碼
這篇文章主要為大家介紹了Keras搭建Mask?R-CNN實(shí)例分割平臺(tái)實(shí)現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
Python通用驗(yàn)證碼識(shí)別OCR庫ddddocr的安裝使用教程
dddd_ocr是一個(gè)用于識(shí)別驗(yàn)證碼的開源庫,又名帶帶弟弟ocr,下面這篇文章主要給大家介紹了關(guān)于Python通用驗(yàn)證碼識(shí)別OCR庫ddddocr的安裝使用教程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
python?rpyc客戶端調(diào)用服務(wù)端方法的注意說明
這篇文章主要介紹了python?rpyc客戶端調(diào)用服務(wù)端方法的注意說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

