gpt4 book ai didi

python - 在 python 中创建默认列表

转载 作者:太空狗 更新时间:2023-10-29 18:20:42 25 4
gpt4 key购买 nike

我正在尝试为非常有用的 collections.defaultdict 创建一个等效列表.以下设计效果很好:

class defaultlist(list):
def __init__(self, fx):
self._fx = fx
def __setitem__(self, index, value):
while len(self) <= index:
self.append(self._fx())
list.__setitem__(self, index, value)

使用方法如下:

>>> dl = defaultlist(lambda:'A')
>>> dl[2]='B'
>>> dl[4]='C'
>>> dl
['A', 'A', 'B', 'A', 'C']

我应该向默认列表添加什么以支持以下行为?

>>> dl = defaultlist(dict)
>>> dl[2]['a'] = 1
>>> dl
[{}, {}, {'a':1}]

最佳答案

在你给出的例子中,你首先尝试检索列表中不存在的值,就像你做dl[2]['a']一样,Python首先检索第三个(索引2) 列表中的元素,然后继续获取该对象上名为“a”的元素 - 因此您还必须将自动扩展行为实现到 __getitem__ 方法,如下所示:

class defaultlist(list):
def __init__(self, fx):
self._fx = fx
def _fill(self, index):
while len(self) <= index:
self.append(self._fx())
def __setitem__(self, index, value):
self._fill(index)
list.__setitem__(self, index, value)
def __getitem__(self, index):
self._fill(index)
return list.__getitem__(self, index)

关于python - 在 python 中创建默认列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8749542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com