Python では、要素aList
のリストとインデックスのリストがありますmyIndices
。aList
の値をインデックスとして持つアイテムを一度に取得する方法はありますmyIndices
か?
例:
>>> aList = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> myIndices = [0, 3, 4]
>>> aList.A_FUNCTION(myIndices)
['a', 'd', 'e']
私はそれを行う方法を知りません。しかし、リスト内包表記を使用できます:
>>> [aList[i] for i in myIndices]
間違いなくリスト内包表記を使用しますが、これを行う関数があります (これを行うメソッドはありlist
ません)。ただし、これは悪い使い方ですitemgetter
が、知識のためにこれを投稿しました。
>>> from operator import itemgetter
>>> a_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> my_indices = [0, 3, 4]
>>> itemgetter(*my_indices)(a_list)
('a', 'd', 'e')
リストによるインデックス作成は numpy で行うことができます。ベース リストを numpy 配列に変換してから、別のリストをインデックスとして適用します。
>>> from numpy import array
>>> array(aList)[myIndices]
array(['a', 'd', 'e'],
dtype='|S1')
必要に応じて、最後にリストに戻します。
>>> from numpy import array
>>> a = array(aList)[myIndices]
>>> list(a)
['a', 'd', 'e']
場合によっては、このソリューションはリスト内包表記よりも便利です。
あなたが使用することができますmap
map(aList.__getitem__, myIndices)
またoperator.itemgetter
f = operator.itemgetter(*aList)
f(myIndices)
すべての要素に同時にアクセスできるリストを必要とせず、サブリスト内のすべての項目を繰り返し使用する (またはそれらを何かに渡したい) 場合は、リスト内包表記ではなくジェネレーター式を使用する方が効率的です。 :
(aList[i] for i in myIndices)