私がリストを持っていると言うl
:
['a','b','c','d','e']
およびインデックスのリストidx
:
[1,3]
返される最も単純で最も効率的な関数は何ですか?
['b','d']
これを使用してみてください:
[l[i] for i in idx]
あなたが欲しいoperator.itemgetter
。
私の最初の例ではitemgetter
、インデックス可能なオブジェクトで使用できる呼び出し可能オブジェクトを作成するためにどのように使用できるかを示します。
from operator import itemgetter
items = itemgetter(1,3)
items(yourlist) #('b', 'd')
次に、引数の解凍を使用してインデックスをリストとして保存する方法を示します。
from operator import itemgetter
a = ['a','b','c','d','e']
idx = [1,3]
items = itemgetter(*idx)
print items(a) #('b', 'd')
もちろん、これにより、tuple
ではなく、list
が得られますが、本当に必要な場合は、タプルからリストを作成するのは簡単です。
リスト内包表記を使用するオプションは次のとおりです。
[v for i, v in enumerate(l) if i in idx]
idx
最初にセットに変換すると、これはより効率的になります。
との代替operator.itemgetter
:
import operator
operator.itemgetter(*idx)(l)
コメントに記載されているように、の長さを超えるインデックスが含まれている可能性がある場合、または順序付けられておらず、と同じ順序を維持したい場合[l[i] for i in idx]
を除いて、おそらくここで最善の策です。idx
l
idx
l