无尽的容器迭代器,具有向后\向前运动支持

时间:2014-07-31 23:03:17

标签: python-3.x containers itertools

在标准库容器中是否具有无限的向前/向后移动支持,如itertools.cycle?或者如何为它实现单线程?

当前代码(github):

def __init__(self, ...):
    self.__weapons = [Weapon()("Blaster"), Weapon()("Laser"), Weapon()("UM")]
    self.__weapon = self.__weapons[0]
    ...

def next_weapon(self):
    ind = self.__weapons.index(self.__weapon)
    if ind < len(self.__weapons) - 1:
        self.__weapon = self.__weapons[ind+1]
    else:
        self.__weapon = self.__weapons[0]

与prev_weapon方法几乎相同的代码。

我想在两个方向上迭代无限容器=)

提前致谢,

1 个答案:

答案 0 :(得分:1)

我认为最好的解决方案是扩展List。

class InfList(list):
"""Infinite list container"""

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self._index = 0


def current(self):
    return self[self._index]


def next(self):
    self._index = (self._index + 1) % len(self)
    return self[self._index]


def prev(self):
    self._index = (self._index - 1) % len(self)
    return self[self._index]