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 反向迭代的资料请关注好吧啦网其它相关文章!
相关文章:
1. 如何基于python3和Vue实现AES数据加密2. Python unittest生成测试报告过程解析3. python matplotlib工具栏源码探析二之添加、删除内置工具项的案例4. CSS3实例分享之多重背景的实现(Multiple backgrounds)5. php去掉数组的第一个值的两个函数:array_shift、array_splice6. 解决VUE项目使用Element-ui 下拉组件的验证失效问题7. uni-app结合PHP实现单用户登陆demo及解析8. CSS Hack大全-教你如何区分出IE6-IE10、FireFox、Chrome、Opera9. Vue+express+Socket实现聊天功能10. 数组在java中的扩容的实例方法

网公网安备