Data Science|Basics

【完全マスター】!Pythonのindexの使い方を徹底解説!

Python初心者の方で「なんとなくindexメソッドの使い方は掴めてきたけど、まだイマイチよく分からない」と悩んでいる方もいるでしょう。

そこで今回は、indexの基礎知識からindexメソッドの使い方まで詳しく説明していきます。indexメソッドの使い方をマスターするためにも、ぜひ最後までご覧くださいね。

indexについて

「index」とは、list型変数のある要素がlistの中で何番目かを示すもので、もし指定された値が存在しなければエラーを起こします。

1. list1 = [ ‘A’ , ‘B’ , ‘C’ , ‘D’ , ‘E’ ]
2.     0 1 2 3 4   # インデックス番号
3.     -5 -4 -3 -2 -1   # 負のインデックス

このようにindexは1からではなく0から始まるので注意してくださいね。

また、「indexメソッド」はシーケンスの値に当てはまるインデックスを返すメソッドです。シーケンスとは複数の要素をまとめて管理できる型のことで、他のプログラミング言語では配列と呼ばれています。

indexメソッドはリスト・タプル・文字列などのシーケンスに使用でき、セット型・辞書型には使用できないので注意しましょう。

補足としてリスト・タプル・文字列とはなにかをまとめておきます。

リスト 任意の型のデータを格納でき、要素には順序があるためインデックスを使用して要素を指定することが可能です。リストの要素は変更することができ、他のプログラミング言語での配列のように扱えます。
タプル こちらもリストと同様、任意の型のデータを格納でき、要素には順序があるためインデックスを使用して要素を指定することが可能です。リストと違う点は、タプルの要素は変更できないということです。
文字列 文字が連なったものですが、0文字の文字列や1文字だけの文字列もあります。0文字の文字列のことを空文字列と呼びます。

また、リストについてはこちらの記事でも詳しく解説しています!

https://www.tech-teacher.jp/blog/python-list/

indexメソッドの使い方

Pythonにおけるlistの要素のインデックス、つまり要素が何番目に格納されているかを表す番号を取得する方法を紹介していきます。

indexメソッドは次のように使用します。

1. シーケンス . index ( ‘value’ )

リストの要素が重複していない場合の使い方

リストの要素が重複していない場合には「index( )メソッド」を使用します。実際にコードを用いて詳しく説明していきます。

1. mylist = [ ‘aaa’ , ‘bbb’ , ‘ccc’ , ‘ddd’ , ‘eee’ ]
2. print( mylist . index ( ‘bbb’ ) )
3. # 実行結果
4. 1
5.
6. print( mylist . index ( ‘eee’ ) )
7. # 実行結果
8. 4

指定した要素が存在しない場合、ValueErrorが発生するので注意してください。

1. print( mylist . index ( ‘fff’ ) )
2. ValueError : ‘fff’ is not in list

このようにmylistに「’fff’」という要素は含まれていないため、エラーが返ってきます。

リストの要素が重複している場合の使い方

リストの要素が重複している場合の「index( )メソッド」は最初に見つかった要素に対応するインデックスだけを返すので注意してください。

1.  mylist = [ ‘aaa’ , ‘bbb’ , ‘ccc’ , ‘ccc’ , ‘aaa’ ]
2.  print ( mylist )
3.  # 実行結果
4.  [ ‘aaa’ , ‘bbb’ , ‘ccc’ , ‘ccc’ , ‘aaa’ ]
5.
6.  print ( mylist . index ( ‘aaa’ ) )
7.  # 実行結果
8.  0
9.
10. print ( mylist . index ( ‘ccc’ ) )
11. # 実行結果
12. 2

すべてのインデックスをリストで取得したい場合には、組み込み関数「enumerate( )」とリスト内包表記を使用します。「リスト内包表記」とは通常のリスト生成では複雑になってしまうようなプログラムを1行で記述する表記方法です。

「enumerate( )関数」を使用して重複のあるlist型変数から要素を取得する場合の記述方法は次の通りです。

1. [ i for i , x in enumerate ( list型変数 ) if x == value ]

実際にコードを使用して説明していきます。

1.  mylist = [ ‘aaa’ , ‘bbb’ , ‘ccc’ , ‘ccc’ , ‘aaa’ ]
2.
3.  for idx , val in enumerate ( mylist ) :
4. print ( idx , val )
5.
6.  # 実行結果
7.  0 aaa
8.  1 bbb
9.  2 ccc
10. 3 ccc
11. 4 aaa

このenumerate( )を利用して、次のように該当している全インデックスを取得することもできます。

1. mylist = [‘aaa’, ‘bbb’, ‘ccc’, ‘ccc’, ‘aaa’]
2. idxlist = [ ]
3. for idx , val in enumerate ( mylist ) :
4.  if val == ‘ccc’ :
5.   idxlist . append ( idx )
6.
7. print ( idxlist )
8.
9. # 実行結果
10. [ 2 , 3 ]

要素が1つだけ含まれている場合・リストに含まれていない場合は空のリストを返送することができ、繰り返し使用するようであれば関数にしておくと便利でしょう。

1.  # 要素が1つだけ含まれている
2.  print ( [ i for i , x in enumerate ( mylist ) if x == ‘’bbb’ ] )
3.  # 実行結果
4.  [ 1 ]
5.
6.  # リストに含まれていない値
7.  print ( [ i for i , x in enumerate ( mylist ) if x == ‘fff’ ] )
8.  # 実行結果
9.  [ ]
10.
11. # 繰り返し使用する場合
12. def my _ index _ multi ( list1 , x ) :
13.  return [ i for i , _x in enumerate ( mylist ) if _x == x )
14.
15. print ( my _ index _ multi ( mylist , ‘aaa’ ) )
16. # 実行結果
17. [ 0 , 4 ]
18.
19. print ( my _ index _ multi ( mylist , ‘bbb’ ) )
20. # 実行結果
21. [ 1 ]
22.
23. print ( my _ index _ multi ( mylist , ‘fff’ ) )
24. # 実行結果
25. [ ]

リストのリスト

リストの中にリストがある場合はどうなのでしょうか。見ていきましょう。

1.  list1 = [ [ 111 , 222 , 333 ] , [ ‘red‘ , ‘blue’ , ‘green’ ] ]
2.  list2 = 222
3.  list3 = [ ‘red’ , ‘blue’ , ‘green’ ]
4.
5.  x = list1 . index ( list2 )
6.  z = list1 . index ( list3 )
7.
8.  print ( x )
9.  print ( z )
10.
11. # 実行結果
12. ValueError : 222 is not in list

「222」はlist1の中の子リストには存在しますがlist1そのものにあるわけではありません。その結果index( )メソッドを使用することはできません。

最大値のインデックスを取得

「max( )」を使うと、最初に見つかった最大値の要素のインデックスが返送されます。

1. list = [ 111 , 555 , 777 , 333, 777 ]
2.
3. print( list. index ( max ( list ) ) )
4. #実行結果
5. 2

最大値が複数存在して、そのすべてのインデックスを取得したい場合は次のようにリスト内包表記を使用します。

1. list = [ 111 , 555 , 777 , 333 , 777 ]
2.
3. print( [ i for i , v in enumerate ( list ) if v == max ( list ) ] )
4. # 実行結果
5. [ 2 , 4 ]

リスト以外でindexメソッドを使う方法

リスト以外にもタプルや文字列でもindexメソッドを使用することができます。
ここからはタプルや文字列でindexメソッドを使用する方法を詳しく説明していきます。

タプル

タプルもリストと同じように「index( )メソッド」を持っているため次のように記述することが可能ですよ。

1. tuple = ( ‘aaa’ , ‘bbb’ , ‘ccc’ )
2. print ( tuple . index ( ‘bbb’ ))
3. # 実行結果
4. 1

文字列

文字列の位置を取得する場合のコードは次のようになっています。

1. str = ‘HelloWorld’
2. print ( str . index ( ‘l’ ) )
3. # 実行結果
4. 2

また、文字数を指定して抽出することもできます。

1.  str = ‘python’
2.
3.  print ( str [ 0 ] )
4.  # 実行結果
5.  p
6.
7.  print ( str [ 5 ] )
8.  # 実行結果
9.  n
10.
11. #負の値を使用すると文字列の後ろから指定可能
12. print ( str [ -1 ] )
13. # 実行結果
14. n
15.
16. print ( str [ -6 ] )
17. # 実行結果
18. p

まとめ

今回indexメソッドの基礎知識や使い方について説明してきましたがいかがでしたでしょうか。

今回説明した要点をまとめると次のようになります。

  • indexとはシーケンスのある要素が何番目かということを表すもの
  • indexは0から始まり、負のインデックスは1番右側が-1となる
  • リストに含まれていない値を指定するとValueErrorが発生する
  • リストの要素が重複している場合は最初のインデックスだけを返す
  • indexメソッドはリスト以外にもタプルや文字列にも使用できる

indexを使用することによって要素の番号を取得することができます。しっかり押さえておきましょう。

このブログでは他にもPythonの学習に役立つ情報を発信しています!ぜひご覧ください。

【初心者向け】Pythonのmap関数とは?基本的な使い方を解説Pythonのmap関数の使い方がよく分からない方はいますか。本記事ではmap関数の使い方をサンプルコードを混じえて解説していきます。Python初心者でmap関数について知りたい方はぜひお読みください。...
【初心者向け】Pythonでデータサイエンティストを目指すには?データサイエンスについて知りたいが、調べてもよく分からない方はいますか。本記事ではPythonでデータサイエンティストを目指す方法、について解説していきます。データサイエンスを学ぼうと思っている方はぜひお読みください。 ...