python-反向遍历

文章介绍了如何使用Python的reversed()函数进行反向遍历,强调了其对对象大小已知或实现__reversed__()方法的要求。同时,文中提到了处理大文本时内存消耗的问题,并给出了自定义类实现反向遍历以提高效率的方法,以及反向代理的概念以避免预先加载数据到列表。
摘要由CSDN通过智能技术生成
4.5 如何反向遍历序列中的元素
  • 可以使用 reversed()
>>> a=[1,2,3,5]
>>> for x in reversed(a):
...     print(x)
...
5
3
2
1
  • 方向遍历只有在待处理的对象拥有可确定的大小,或者对象实现了__reversed__()特殊方法时,才能生效,如果两个条件都无法满足,则必须首先将这个对象转为列表。
>>> f = open('/etc/passwd')
>>> for line in reversed(list(f)):
...     print(line,end='')
...
  • 但是上述反转代码,在遇到大文本时,将耗费大量的内存。
  • 自定义类的反转函数如下
>>> class C:
...     def __init__(self,start):
...         self.start = start
...     def __iter__(self):
...         n = self.start
...         while n>0:
...             yield n
...         n -= 1
...     def __reversed__(self):
...         n =1
...         while self.start>=n:
...             yield n
...         n +=1
...
>>>
  • 定义一个反向代理会使代码更高效,因为这样就不用提前先把数据放到列表中。
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值