Вы можете создать подкласс list
и переопределить метод __setitem__
, чтобы он расширял список в соответствии с заданным индексом, который также может быть объектом slice
, в этом случае больший из start
и stop
атрибуты среза должны использоваться:
class List(list):
def __setitem__(self, index, value):
self.extend([None] * ((max(index.start, index.stop - 1) if isinstance(index, slice) else index) - len(self) + 1))
super().__setitem__(index, value)
так, чтобы:
arr = List((1, 2, 3))
arr[5] = 5
print(arr)
arr[7:9] = [4, 5]
print(arr)
вывод:
[1, 2, 3, None, None, 5]
[1, 2, 3, None, None, 5, None, 4, 5]
Обратите внимание, что ожидаемый результат вВаш вопрос неверен, потому что индекс 5
фактически относится к 6-му, а не 5-му пункту списка.