使用内建的reversed()函数实现反向迭代序列中的元素(字符串、列表、元组序列):
a = [1, 2, 3]
for x in reversed(a):
print(x)
Outs:
3
2
1
注意
1、反向迭代只有在待处理对象拥有可确定的大小时,或者对象实现了__reversed__()
特殊方法时,才能奏效;
2、如果这两个条件都无法满足,则必须先将这个对象转换为列表:
f = open('somefile')
for line in reversed(list(f)): print(line) # 当f特别大时,会消耗大量的内存
在类上自定义实现反向迭代(实现了reversed()方法):
class Countdown:
def _init__(self, start):
self.start =start
# 使用生成器函数生成迭代器
def __iter__(self):
n = self.start
while n>0:
yield n
n -= 1
# 实现__reversed__()方法,实现反向迭代器
def __reversed__(self):
n = self.start
while n<0:
yield n
n += 1
总结:
1、使用内建的reversed()
函数实现反向迭代序列中的元素(字符串、列表、元组序列);
2、定义一个反向迭代器可使代码变得更加高效,因此这样也就无需先把数据放到列表中,然后再去反向迭代列表了。