Für Python 3.3:
Code: Alles auswählen
class DefaultList(list):
def __init__(self, default=lambda: None, iterable=None):
super().__init__(iterable or list())
self._default = default
def __getitem__(self, index):
if index >= len(self):
return self._default()
else:
return super().__getitem__(index)
def __setitem__(self, index, object_):
if index >= len(self): #-- Expand list if necessary.
self.extend([self._default()] * (index - len(self) + 1))
super().__setitem__(index, object_)
Code: Alles auswählen
>>> foo = DefaultList(lambda: 42, range(10))
>>> foo
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> foo[5] == 5
True
>>> foo[0] = 123
>>> foo[0] == 123
True
>>> foo[30] == 42
True
>>> foo[15] = 321
>>> foo
[123, 1, 2, 3, 4, 5, 6, 7, 8, 9, 42, 42, 42, 42, 42, 321]
Grüße ... bwbg