from itertools import cycle, islice
class CycleView:
def __init__(self, seq):
self.seq = seq
def __getitem__(self, index):
if isinstance(index, slice):
start = (index.start or 0) % len(self.seq)
if (stop := index.stop) is not None:
stop = start + stop - (index.start or 0)
return islice(cycle(self.seq), start, stop)
return self.seq[index % len(self.seq)]
DEADVUL = 'x', 'y', 'z'
print(*CycleView(DEADVUL)[:10])
print(*CycleView(DEADVUL)[2000000000:2000000010])
ZnJvbSBpdGVydG9vbHMgaW1wb3J0IGN5Y2xlLCBpc2xpY2UKCmNsYXNzIEN5Y2xlVmlldzoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXEpOgogICAgICAgIHNlbGYuc2VxID0gc2VxCgogICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CiAgICAgICAgICAgIHN0YXJ0ID0gKGluZGV4LnN0YXJ0IG9yIDApICUgbGVuKHNlbGYuc2VxKQogICAgICAgICAgICBpZiAoc3RvcCA6PSBpbmRleC5zdG9wKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgIHN0b3AgPSBzdGFydCArIHN0b3AgLSAoaW5kZXguc3RhcnQgb3IgMCkKICAgICAgICAgICAgcmV0dXJuIGlzbGljZShjeWNsZShzZWxmLnNlcSksIHN0YXJ0LCBzdG9wKQogICAgICAgIHJldHVybiBzZWxmLnNlcVtpbmRleCAlIGxlbihzZWxmLnNlcSldCgpERUFEVlVMID0gJ3gnLCAneScsICd6JwpwcmludCgqQ3ljbGVWaWV3KERFQURWVUwpWzoxMF0pCnByaW50KCpDeWNsZVZpZXcoREVBRFZVTClbMjAwMDAwMDAwMDoyMDAwMDAwMDEwXSk=