Python

【完全マスター】!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文字の文字列のことを空文字列と呼びます。

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を使用することによって要素の番号を取得することができます。しっかり押さえておきましょう。

プログラミングの家庭教師『Tech Teacher』


引用元:Tech Teacher

「スクールに通い続ける自信がない…」
「時間がなくてスクールに通えない…」

そんな方にはプログラミングの家庭教師『Tech Teacher』がおすすめです。
Tech Teacherはマンツーマン指導なので、生徒様一人ひとりに最適な指導を行うことができます。また、オンライン指導も可能なので、全国どこにいても家庭教師の授業を受けることができます。

Tech Teacherの3つの特徴


生徒様に最適化されたマンツーマン指導
完全マンツーマンの指導なので、生徒様の目的・学習状況・ご要望に合わせて、最適な指導をご提供いたします。

指導力・人柄・相性の優れた教師のご紹介
Tech Teacherには採用率20%の選考を突破した、指導力の高い教師が在籍しています。また、選考では指導力だけではなく人柄も重視しております。

1,000人の教師が在籍!幅広い指導に対応可能
業界トップレベルの1,000人の教師が在籍しています。そのため、幅広い言語・ツール・目的に対応することができます。

家庭教師ならではの5つの魅力


オーダーメイドのカリキュラム
生徒様一人ひとりに習熟度・目的・期間に応じて最適なカリキュラムを提供いたします。

きめ細やかなフォローが可能
生徒様からのご要望にきめ細やかに対応し、学習計画や勉強法などの指導もできるので、普段の勉強も捗ります。

習い事・学業・お仕事との両立が簡単
教室に通う必要がないので親御様の送迎も不要です。授業時間・頻度を生徒様のご都合に合わせて自由に調節することができます。

自分のペースで進められる
生徒様の理解度や意欲に応じて授業のスピードを調節できます。不明点や疑問点は都度立ち止まって解消できるので、着実に理解して進むことができます。

すぐ質問できるから挫折しない
先生を独り占めできるので、周りの目を気にすることなく分からないところをいつでも質問できます。

Tech Teacherへのお問い合わせ

無料体験授業・資料請求のお問い合わせはこちらから

質問のみのお問い合わせも受け付けております。