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 |
『Tech Teacher』3つの魅力
魅力1. オーダーメイドのカリキュラム
『Tech Teacher』では、決められたカリキュラムがなくオーダーメイドでカリキュラムを組んでいます。「質問だけしたい」「相談相手が欲しい」等のご要望も実現できます。
魅力2. 担当教師によるマンツーマン指導
Tech Teacherでは、完全マンツーマン指導で目標達成までサポートします。
東京大学を始めとする難関大学の理系学生・院生・博士の教師がが1対1で、丁寧に指導しています。
そのため、理解できない箇所は何度も分かるまで説明を受けることができます。
魅力3. 3,960円/30分で必要な分だけ受講
Tech Teacherでは、授業を受けた分だけ後払いの「従量課金制」を採用しているので、必要な分だけ授業を受講することができます。また、初期費用は入会金22,000円のみです。一般的なプログラミングスクールとは異なり、多額な初期費用がかからないため、気軽に学習を始めることができます。
まとめ
・魅力1. 担当教師によるマンツーマン指導
・魅力2. オーダーメイドのカリキュラム
・魅力3. 3,960円/30分で必要な分だけ受講
質問のみのお問い合わせも受け付けております。
まとめ
今回indexメソッドの基礎知識や使い方について説明してきましたがいかがでしたでしょうか。
今回説明した要点をまとめると次のようになります。
- indexとはシーケンスのある要素が何番目かということを表すもの
- indexは0から始まり、負のインデックスは1番右側が-1となる
- リストに含まれていない値を指定するとValueErrorが発生する
- リストの要素が重複している場合は最初のインデックスだけを返す
- indexメソッドはリスト以外にもタプルや文字列にも使用できる
indexを使用することによって要素の番号を取得することができます。しっかり押さえておきましょう。
このブログでは他にもPythonの学習に役立つ情報を発信しています!ぜひご覧ください。