Python 如何反方向迭代一个序列
问题
你想反方向迭代一个序列
解决方案
使用内置的reversed()函数,比如:
>>>a=[1,2,3,4] >>>forxinreversed(a): ...print(x) ... 4 3 2 1
反向迭代仅仅当对象的大小可预先确定或者对象实现了__reversed__()的特殊方法时才能生效。如果两者都不符合,那你必须先将对象转换为一个列表才行,比如:
#Printafilebackwards f=open('somefile') forlineinreversed(list(f)): print(line,end='')
要注意的是如果可迭代对象元素很多的话,将其预先转换为一个列表要消耗大量的内存。
讨论
很多程序员并不知道可以通过在自定义类上实现__reversed__()方法来实现反向迭代。比如:
classCountdown: def__init__(self,start): self.start=start #Forwarditerator def__iter__(self): n=self.start whilen>0: yieldn n-=1 #Reverseiterator def__reversed__(self): n=1 whilen<=self.start: yieldn n+=1 forrrinreversed(Countdown(30)): print(rr) forrrinCountdown(30): print(rr)
定义一个反向迭代器可以使得代码非常的高效,因为它不再需要将数据填充到一个列表中然后再去反向迭代这个列表。
以上就是Python如何反方向迭代一个序列的详细内容,更多关于Python反向迭代的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。