テクノロジー

リストとインデックスを使いこなそう!enumerate関数の使い方【Python編】

リストとインデックスを使いこなそう!enumerate関数の使い方【Python編】

Pythonは、世界中で非常に広く使われている言語ですよね。読みやすく、理解しやすいため、初心者でも始めやすくPythonの勉強を始める方も非常に多いのだとか。

Pythonは、様々な分野で広く利用されています。実際に、Googleのプログラミング言語のチュートリアルについての検索回数をランキング化する「PYPL(PopularitY of Programming Language)」においてもPythonは1位を獲得していることから需要の高さがうかがえます。

このPythonの勉強を始めたときに、つまづきやすいのが、繰り返し処理。for文などを用いて繰り返しの処理を記述するのですが、初心者にとってどのように処理が行われるのかがイメージしづらいため、理解がしにくい分野の1つです。その繰り返し処理の中で登場するenumerate関数です。繰り返し表現とenumerate関数を組み合わせることでPythonにおいて様々な処理ができるようになります。

それでは今回は、enumerate関数とは何か、enumerate関数のPythonにおける使い方をお伝えします。この記事によってenumerate関数をマスターして、Pythonの開発を始めましょう。

Pythonとは

Pythonのイメージ
Pythonは、1990年代初頭に、Guido van Rossum氏が開発したプログラミング言語です。バージョンは2と3の大きく2つが存在していますが、基本的にできることはバージョン2と3において差はないのですが、記述方法が異なる場合があります。なお、バージョン2については、2021年7月にサポートが終了されます。

Pythonは、機械学習を用いたAI(人工知能)の開発、データ分析、Webアプリケーション開発など幅広い分野で利用されています。特に、AI(人工知能)の開発のためのフレームワークがPythonで記載されているものが多く、AI(人工知能)においては、広く利用されていることが特徴です。

また、プログラミング言語としての特徴は、

  • 読みやすく直感的にコードを理解しやすいこと
  • 他の言語と比べて少ない記述量で同じ処理を記載できること
  • ライブラリが豊富なため、0からすべてのコードを書く必要がないこと

です。

Pythonの開発を行う人が持つべき心構えとして発行されている「The Zen of Python」にも記載されています。試しに、Windowであればコマンドプロンプト、MacOSは、ターミナルでpythonとコードを実行した後、import thisを実行しましょう。するとThe Zen of Python表示されます。

その中でも、「Beautiful is better than ugly.(醜いより美しいほうがよい)」、「Explicit is better than implicit.(暗示するより明示するほうがよい)」、「Readability counts.(読みやすさこそ正義である)」などの思想からも読み解けるようにPythonの開発姿勢として、読みやすく直感的であるようなコード設計になっていることがわかります。

ただし一方で、Pythonは、C言語やJavaなどと比較すると、変数を読み込んだり書き込んだりするときに、型のチェックをするため、処理速度が遅い傾向があります。そのため、Pythonで処理速度を求められるサービス開発する場合は、サービスレベルにおいて処理速度が問題ないかを検討する必要があります。

Pythonでのenumerate関数とは

関数のイメージ
次に、Pythonのenumerate関数についてお伝えします。

enumerate関数は、Pythonの標準ライブラリに搭載されていて、Pythonをインストールすると利用できます。enumerateは、英語で「数え上げる」という意味があるように、Python上の関数においてもインデックス番号を数え上げる際に利用します。インデックス番号とは、「データ型における何番目か」という番号のことで、1番目を「0」からカウントします。特に、リストの中の何番目の値に対して何か処理をする場合に、インデックス番号を取得します。

enumerate関数は、第1引数にiterable (イテラブル)を指定する必要があります。引数とは、関数内に指定する値のことで、1番目に指定する引数を第1引数、2番目に指定する引数を第2引数といいます。Iterable(イテラブル)とは、繰り返し処理が可能なデータ型のことで、代表的なものには、リストやタプルがあります。

リストやタプルは、データを格納する型のことで、リストは、順番を保持した状態でデータを格納し、データの削除や追加が可能なデータ型のことです。一方タプルは、順番を保持した状態でデータを格納し、作成後はタプル内のデータを修正することができないというのが特徴です。

enumerate関数をPythonで実行すると、iterable(イテラブル)オブジェクトのインデックス番号を取り出せます。

Pythonでのenumerate関数の書き方

書き方のイメージ
では、実際のPythonでのenumerate関数の書き方についてお伝えします。

まずは、enumerate関数についてPythonの公式ドキュメントに載っている方法をお伝えします。

seasonsといく4つの季節が順番に入ったリストを準備します。

seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’]

そして、このリストをenumerate関数に渡すことで、インデックス番号を取得した、タプルを返してくれます。それをリスト型で表示します。

list(enumerate(seasons))

上記を実行すると、

[(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)]

という結果を得られます。

enumerate関数は、Pythonでfor文と組み合わせて利用する場合が多いため、for文を組み合わせた処理についてお伝えします。

まずは、seasonsといく4つの季節が順番に入ったリストを準備しましょう。

seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’]

これらについて、繰り返し処理を用いて、先ほどと同じ結果を得ます。

result = [] for season in enumerate(seasons):
result.append(season)

これを実行すると、[(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)] という上記と同じ結果を得られます。

インデックス番号と要素の中身を別々に取り出したい場合は、変数を2つ準備するとそれぞれを抽出できます。

for num, season in enumerate(seasons):
print(num, season)

を実行すると

0 Spring
1 Summer
2 Fall
3 Winter

を得られるます。

また、enumerate関数において、インデックス番号の始まりを指定もできます。具体的には、第2引数に最初の数値を指定することで実装できます。

seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’] list(enumerate(seasons, 1))

などとすると、

[(1, ‘Spring’), (2, ‘Summer’), (3, ‘Fall’), (4, ‘Winter’)]

という結果を得られます。

Pythonでのenumerate関数を応用すると、こんなことができる

できることのイメージ
次に、enumerate関数をPythonの中で応用するとできることについてお伝えします。

偶数番目の要素のみを抽出する

仮に、26文字のアルファベットのリストがあるとしましょう。その中から偶数番目のアルファベットのみを格納するというケースについてみていきます。

alpha = [“A”, “B”, “C”, “D”, “E”, “F, “G”, “H”, “I”, “J”, “K”, “L”, “M”, ”N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”]

注意しなければいけないのは、インデックス番号は、0、1,2…と続きますので、偶数番号の要素は、インデックス番号が奇数または、インデックス番号に1を足した値が偶数のものを抽出する、またはインデックス番号を1から始めるようにする必要があります。

result = [] for a, b in enumerate(alpha):
if a % 2 == 1:
result.append(b)
print(result)

を実行すると偶数の要素のみが抽出できていることがわかります。

enumerate関数を使う際の注意点

関数の注意のイメージ
最後に、enumerate関数を使う際の注意点をお伝えします。

enumerate関数が出力するインデックス番号はデフォルトの設定では、0から始まるということです。これは、プログラミング言語において、番号が0から始まるという特徴を踏襲しているからです。この点に注意して実装をしないと意図しない結果を得る可能性があります。例えば、1番目の値なので、1とインデックス番号を指定すると、実際に取得した値は0だったというケースもあります。そのため、第2引数に1を指定すると、直感的にわかりやすい処理になるでしょう。

ただし、複数人で開発を行う場合などにおいては、インデックス番号の始まりが異なっていると理解の差が生じてしまいバグになってしまう可能性があります。そのため、開発を開始する前にルールを決めるなど対策をしましょう。

まとめ
さて、今回はenumerate関数とは何かと具体的な使い方についてお伝えしました。ここで今回お伝えしたかった内容は以下となります。

  • Pythonは、機械学習などを用いたAI(人工知能)の開発、データ分析、Webアプリケーション開発など幅広い分野で利用されてプログラミング言語
  • enumerate関数は、Pythonのイテラブルなオブジェクトのインデックス番号を返す関数
  • enumerate(iterable, インデックス番号の最初を指定)を実行すれば結果を得られます
  • for文とif文を組み合わせることでenumerate関数は応用の使い方ができること
  • enumerate関数のデフォルトのインデックス番号の最初の番号は0であることにため、インデックス番号を取得する場合に注意すること

enumerate関数をPythonで使うと、インデックス番号を取得することができ、様々な開発に応用できます。enumerate関数をマスターして、様々なPythonの開発を行いましょう。

【お知らせ】

当メディア(AIZINE)を運営しているAI(人工知能)/DX(デジタルトランスフォーメーション)開発会社お多福ラボでは「福をふりまく」をミッションに、スピード、提案内容、価格、全てにおいて期待を上回り、徹底的な顧客志向で小規模から大規模ソリューションまで幅広く対応しています。

御社の悩みを強みに変える仕組みづくりのお手伝いを致しますので、ぜひご相談ください。

お多福ラボコーポレートサイトへのバナー

トップへ戻る
タイトルとURLをコピーしました