3-4 如何进行反向迭代以及如何实现反向迭代?

2019-02-09  本文已影响0人  Diolog

实际案例:

通常情况下,反向一个列表会使用一下方法:

L = [1,2,3,4,5]
L.reverse()

通过以上两行代码,就将L进行了反序操作。
但是有某些情景,不允许改变L,并获取它的反向列表。

L[::-1]

通过以上代码同样可以在不改变原列表的情况下获得它的反向列表。
但是这样会得到一个新列表,在内存角度上看,也是很浪费的。

推荐方式:
使用内置函数reversed():

reversed(L)
使用此函数将会得到列表的反向迭代器。

for x in reversed(L):
  print(x)

实现代码:

class FloatRange:
    def __init__(self,start,end,step=0.1):
        self.start = start
        self.end = end
        self.step = step

    def __iter__(self):
        t = self.start
        while t <= self.end:
            yield t
            t += self.step

    def __reversed__(self):
        t = self.end
        while t >= self.start:
            yield t
            t -= self.step

for x in FloatRange(1.0,4.0,0.5):
    print(x)

for x in reversed(FloatRange(1.0,4.0,0.5)):
    print(x)
上一篇 下一篇

猜你喜欢

热点阅读