Say I have an array foo
with e.g. elements [1, 2, 3]
, and that I want to retrieve elements of foo
as if foo
had been "infinitely concatenated".
For example foo[0:2]
would return (like a normal list):
[1, 2]
and foo[0:5]
would return:
[1, 2, 3, 1, 2]
while foo[7:13]
would return:
[2, 3, 1, 2, 3, 1]
Are there any data containers in Python or extended modules that already facilitate this type of access? If not, what would be a good/easy way to provide this container?
I'm afraid you'll have to implement it yourself. It isn't difficult though:
class cyclist(list):
def __getitem__(self, index):
return list.__getitem__(self, index % len(self))
def __getslice__(self, start, stop):
return [self[n] for n in range(start, stop)]
foo = cyclist([1, 2, 3])
print foo[0:2] # [1, 2]
print foo[7:13] # [2, 3, 1, 2, 3, 1]
print foo[0:5] # [1, 2, 3, 1, 2]
It's missing some details like taking care of omitted slice parameters, negative numbers in slices, and slice step.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With