Вот минимальный код для передачи заданных вами примеров (с необходимыми корректировками: вы ожидаете, что странный пробел и кавычки, «None» будут напечатаны в приглашении без оператора print
, и т. Д.):
class SparseList(list):
def __setitem__(self, index, value):
missing = index - len(self) + 1
if missing > 0:
self.extend([None] * missing)
list.__setitem__(self, index, value)
def __getitem__(self, index):
try: return list.__getitem__(self, index)
except IndexError: return None
__test__ = dict(allem='''
>>> l = SparseList()
>>> l
[]
>>> l[2] = "hello"
>>> l
[None, None, 'hello']
>>> print l[5]
None
>>> l[4] = 22
>>> l
[None, None, 'hello', None, 22]
>>> len(l)
5
>>> for i in l: print i
None
None
hello
None
22
''')
import doctest
doctest.testmod(verbose=1)
Я полагаю, вам нужно больше (для поддержки отрицательных индексов, срезов и прочего), но это все ваши примеры, неявно указывающие.