1

リストからアイテムを取り出し、見つからない場合はデフォルトを返したいと思います(通常のインデックス例外ではなく)。辞書の get(key, default) に非常に似ています。ドキュメントを熟読した後、これを提供する簡単な組み込みの Python ソリューションをまだ見落としているように感じます。

これが私が思いつくことができる最速のものです:

def pluck(list_items, index, default=None):
  return dict(zip(range(len(list_items)), list_items)).get(index, default)

s = [1, 2,]
pluck(s, 3, None)

ありがとう!

4

4 に答える 4

3

正のインデックスのみを使用している場合、非常に高速かつシンプルに保つには:

seq, i = [1, 2, 3], 2
plucked = seq[i] if seq[i:] else None

さもないと:

def pluck(seq, index, default=None):
    try:
        return seq[index]
    except IndexError:
        return default

例外が標準の場合:

def pluck(seq, index, default=None):
    return seq[index] if seq[index:] and seq[-index-1:] else default

どちらも負のインデックスで機能します。

于 2013-06-13T21:45:05.007 に答える
2

このようなもので、負のインデックスでも機能します。

def list_get(lis, index, default = None):
   index = index if index >=0 else len(lis) + index
   return lis[index] if 0 <= index < len(lis) else default

>>> lis = range(10)
>>> list_get(lis, 8, 'foo')
8
>>> list_get(lis, 11, 'foo')
'foo'
>>> list_get(lis, -11, 'foo')
'foo'
>>> list_get(lis, -9, 'foo')
1
>>> list_get(lis, -5, 'foo')
5
于 2013-06-13T21:42:48.090 に答える
1

あなたの摘み取り関数は次のように書くことができるようです

def pluck(list_items, index, default=None):
  if index>length(list_items)-1
     return default
   else 
      return list_items[index]
于 2013-06-13T21:44:34.927 に答える