リストには辞書のような安全な「get」メソッドがないのはなぜですか?
>>> d = {'a':'b'}
>>> d['a']
'b'
>>> d['c']
KeyError: 'c'
>>> d.get('c', 'fail')
'fail'
>>> l = [1]
>>> l[10]
IndexError: list index out of range
ベストアンサー1
.get
結局のところ、 a はdict
連想コレクション (値が名前に関連付けられている) であるため、安全なメソッドがない可能性があります。この場合、例外をスローせずにキーが存在するかどうかをチェックする (およびその値を返す) のは非効率的ですが、リスト要素にアクセスする例外を回避するのは非常に簡単です (len
メソッドは非常に高速であるため)。この.get
メソッドを使用すると、名前に関連付けられた値を照会できますが、辞書の 37 番目の項目に直接アクセスすることはできません (これは、リストに要求している内容に近いでしょう)。
もちろん、これを自分で簡単に実装することもできます。
def safe_list_get (l, idx, default):
try:
return l[idx]
except IndexError:
return default
__builtins__.list
のコンストラクタにモンキーパッチを適用することもできます__main__
が、ほとんどのコードでは使用されない為、それほど広範囲にわたる変更にはなりません。自分のコードで作成したリストでこれを使用したい場合は、単にサブクラス化list
してget
メソッドを追加することができます。