Pythonでは、リストから上位k個の要素のインデックスを取得する方法がいくつかあります。以下にその方法をいくつか紹介します。
方法1: sorted
とrange
を使用する
Pythonの組み込み関数sorted
とrange
を使用して、リストの上位k個の要素のインデックスを取得することができます。
a = [5,3,1,4,10]
k = 2
indices = sorted(range(len(a)), key=lambda i: a[i])[-k:]
このコードでは、range(len(a))
でインデックスのリストを作成し、key=lambda i: a[i]
でソートの基準をリストa
の要素に設定しています。そして、[-k:]
で上位k個のインデックスを取得しています。
方法2: numpy.argsort
を使用する
numpy
ライブラリのargsort
関数を使用すると、リストの上位k個の要素のインデックスを効率的に取得することができます。
import numpy as np
a = [5,3,1,4,10]
k = 2
indices = np.argsort(a)[-k:]
numpy.argsort
は、配列をソートしたときのインデックスを返します。そのため、[-k:]
で上位k個のインデックスを取得することができます。
方法3: heapq.nlargest
を使用する
heapq
モジュールのnlargest
関数を使用すると、リストの上位k個の要素のインデックスを効率的に取得することができます。
import heapq
a = [2, 5, 3, 7, 1, 8, 4]
k = 3
indices = heapq.nlargest(k, range(len(a)), a.__getitem__)
heapq.nlargest
は、第一引数に取得したい要素の数、第二引数に対象のリスト、第三引数にキーとなる関数を指定します。この例では、a.__getitem__
をキーとして指定しています。
これらの方法を使って、Pythonのリストから上位k個の要素のインデックスを効率的に取得することができます。適切な方法を選択して、コードを最適化しましょう。