68

Python では、要素aListのリストとインデックスのリストがありますmyIndicesaListの値をインデックスとして持つアイテムを一度に取得する方法はありますmyIndicesか?

例:

>>> aList = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> myIndices = [0, 3, 4]
>>> aList.A_FUNCTION(myIndices)
['a', 'd', 'e']
4

7 に答える 7

118

私はそれを行う方法を知りません。しかし、リスト内包表記を使用できます:

>>> [aList[i] for i in myIndices]
于 2012-08-07T13:52:58.787 に答える
15

間違いなくリスト内包表記を使用しますが、これを行う関数があります (これを行うメソッドはあり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')
于 2012-08-07T14:05:17.147 に答える
11

リストによるインデックス作成は 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']

場合によっては、このソリューションはリスト内包表記よりも便利です。

于 2012-09-06T11:48:55.990 に答える
7

あなたが使用することができますmap

map(aList.__getitem__, myIndices)

またoperator.itemgetter

f = operator.itemgetter(*aList)
f(myIndices)
于 2015-07-27T08:55:55.017 に答える
3

すべての要素に同時にアクセスできるリストを必要とせず、サブリスト内のすべての項目を繰り返し使用する (またはそれらを何かに渡したい) 場合は、リスト内包表記ではなくジェネレーター式を使用する方が効率的です。 :

(aList[i] for i in myIndices) 
于 2016-01-20T21:15:22.780 に答える
2

mapまたは、関数を使用して関数型アプローチを使用することもできlambdaます。

>>> list(map(lambda i: aList[i], myIndices))
['a', 'd', 'e']
于 2020-09-22T14:33:56.933 に答える