4.5 如何反向遍历序列中的元素
>>> 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
...
>>>
- 定义一个反向代理会使代码更高效,因为这样就不用提前先把数据放到列表中。
网友评论