2

私がリストを持っていると言うl

['a','b','c','d','e']

およびインデックスのリストidx

[1,3]

返される最も単純で最も効率的な関数は何ですか?

['b','d']
4

3 に答える 3

13

これを使用してみてください:

[l[i] for i in idx]
于 2012-09-17T18:53:44.840 に答える
7

あなたが欲しい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が得られますが、本当に必要な場合は、タプルからリストを作成するのは簡単です。

于 2012-09-17T18:52:39.630 に答える
-1

リスト内包表記を使用するオプションは次のとおりです。

[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]を除いて、おそらくここで最善の策です。idxlidxl

于 2012-09-17T18:52:31.660 に答える