リストには辞書のような安全な「get」メソッドがないのはなぜですか? 質問する

リストには辞書のような安全な「get」メソッドがないのはなぜですか? 質問する

リストには辞書のような安全な「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メソッドを追加することができます。

おすすめ記事