自分で拡張すればいいのに
- ref: :gnuvince.net ? Blog Archive ? My 5 things I hate about Python
- ref:西尾泰和のブログ: LL魂準備日記
- ref:Matzにっき(2007-07-19)
分からないでもないけど 1、2 なんか、そのまま自分で拡張すればいいじゃねえかと。
dict.get 見たいなのが list にも欲しい?
def MyList(list): def get(i, default = None): if isinstance(i, integer): raise KeyError('index must be integer') elif i < 0: raise KeyError('index out of range') if i >= len(self): return default else: return self[i]
defaultdict みたいな defaultlist が欲しい?*1
class defaultlist(list): def __init__(self, default_factory = None, *args, **kwargs): super(defaultlist, self).__init__(*args, **kwargs) self.default_factory = default_factory def __getitem__(self, key): self._check_range() if key >= len(self): self.extend(self.__missing__(i) for i in xrange(len(self), key + 1)) return self[key] def __setitem__(self, key, value): self._check_range() if key < len(self): return super(defaultlist, self).__setitem__(key, value) else: self.extend(self.__missing__(i) for i in xrange(len(self), key)) return super(defaultlist, self).append(value) def _check_range(self, key): if not isinstance(key, integer): raise KeyError('index must be integer') if key < 0: raise KeyError('index out of range')
range/xrange が終端を含まないのが気に食わない?
def from_to(f, t): return xrange(f, t + 1)
まぁ、そんな感じ。
*1:スライスの処理をしてません