from itertools import count
class CycleView:
def __init__(self, seq):
self.seq = seq
def __getitem__(self, index):
if isinstance(index, slice):
return map(
self.__getitem__,
count(index.start) if index.stop is None
else range(index.start or 0, index.stop)
)
return self.seq[index % len(self.seq)]
DEADVUL = 'x', 'y', 'z'
print(*CycleView(DEADVUL)[:10])
print(*CycleView(DEADVUL)[2000000000:2000000010])
ZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNvdW50CgpjbGFzcyBDeWNsZVZpZXc6CiAgICBkZWYgX19pbml0X18oc2VsZiwgc2VxKToKICAgICAgICBzZWxmLnNlcSA9IHNlcQoKICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgogICAgICAgICAgICByZXR1cm4gbWFwKAogICAgICAgICAgICAgICAgc2VsZi5fX2dldGl0ZW1fXywKICAgICAgICAgICAgICAgIGNvdW50KGluZGV4LnN0YXJ0KSBpZiBpbmRleC5zdG9wIGlzIE5vbmUKICAgICAgICAgICAgICAgIGVsc2UgcmFuZ2UoaW5kZXguc3RhcnQgb3IgMCwgaW5kZXguc3RvcCkKICAgICAgICAgICAgKQogICAgICAgIHJldHVybiBzZWxmLnNlcVtpbmRleCAlIGxlbihzZWxmLnNlcSldCgpERUFEVlVMID0gJ3gnLCAneScsICd6JwpwcmludCgqQ3ljbGVWaWV3KERFQURWVUwpWzoxMF0pCnByaW50KCpDeWNsZVZpZXcoREVBRFZVTClbMjAwMDAwMDAwMDoyMDAwMDAwMDEwXSk=