我试图defaultlist
通过类比来创建defaultdict
. 这个想法是,有时我想要一个预先填充(实际上!)的列表,其中包含未明确设置值的所有索引处的一些元素。不同之defaultdict
处在于我实际上并没有将默认值添加到列表中,除非由于用户分配而必须扩展列表。
1)这个设计有问题吗?
2)这是我要使用的实现。有什么问题吗?
class defaultlist(list):
def __init__(self, default_factory, arg = ()):
# note: cannot use arg = None since list(None) is not the same as list()
# alternatively can use:
# def __init__(self, default_factory, *args, **kwargs)
self.default_factory = default_factory
super().__init__(arg)
def __getitem__(self, key):
try:
return super().__getitem__(key)
except IndexError:
return self.default_factory()
def __setitem__(self, key, value):
for i in range(len(self), key):
self.append(self.default_factory())
self.append(value)
编辑:最初,我有两个错误。抱歉,感谢您指出答案中的两个错误。