22
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リストのインデックスを複数指定する(Python)

Last updated at Posted at 2014-11-02

Pythonでリストから複数の値を取り出したい場合、連続していればスライスで取り出せますが、連続していない場合はどう取り出すのか分からなかったので調べました。

#検証環境

  • Python 2.7

#方法
##itemgetterを使う方法
python2.5以降からitemgetterが使えるようなのでそれを使ってみます。
リストでインデックスを渡せばそのインデックスの値が返ってきます。

from operator import itemgetter

a = ("a", "b", "c", "d", "e")

print itemgetter(1,3)(a) # ('b', 'd')

なぜこういうことをしたくなったかというと、機械学習させてラベルが返ってくるのはいいのですが、そこから元データを取り出す場合、簡単に書く方法が思いつかなかったからです。
例えば小文字化大文字化を判別させる分類器で、ラベルが返ってきてそこから大文字のものだけを取り出す場合は以下のように書きました。

from operator import itemgetter
import numpy

label_prediction = numpy.array([0,0,1,1,0,1])
data = ["a","b","C","D","e","F"]

label_match = numpy.where(label_prediction==1)[0]
print itemgetter(*label_match)(data)

他にもいい方法があったらどしどし教えて下さい。

##numpyを使う方法
s-wakabaさんから教えて頂きました!ありがとうございます。
文字列だとnumpy使えないーなどと勝手に悲観しておりましたが、普通に使えました。
itemgetter使うよりはるかに美しいです。

import numpy

label_prediction = numpy.array([0,0,1,1,0,1])
data = ["a","b","C","D","e","F"]

print numpy.array(data)[label_prediction==1]

調べたこと書いておくとより良い方法とか教えてもらえて助かりますね。
どんどんメモして無知をさらけ出していきたいと思います。

22
16
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?