defaultdict
と類推してdefaultlist
を作成しようとしています。そのアイデアは、値が明示的に設定されていないすべてのインデックスで、いくつかの要素があらかじめ入力されているリスト(実際には!)が必要な場合があるということです。 defaultdict
との違いは、ユーザー割り当てのためにリストを拡張しなければ、リストにデフォルト値を実際に追加しないということです。defaultlist design
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)
EDIT:もともと、私は2つの間違いがありました。申し訳ありませんが、答えに両方のエラーを指摘してくれてありがとう。
なぜあなただけの数字キーでdefaultdictを使用することはできませんか? – Keith
@Keith:なぜPythonは数値キーで 'dict'を使い、言語の厄介な' list'を投げ捨てるのですか? –
@EliBenderskyあなたのアプリケーションがある種の順序付けられたシーケンスを維持する必要があるかどうかによって異なります。それが本当に必要条件であるかどうかは、この疑問からは明らかではありません。 – Keith