1ヶ月でWebデザイン・プログラミングスキルをオーダーメイドのカリキュラムで学べるスクール、それがWebCamp。

【Python入門】for文でデータのindexを取得する方法

【Python入門】
Pocket

Pythonでは、for文を用いることでさまざまなデータの集まりから、ひとつずつ順番にデータを取り出す事が出来ます。しかし、時にはデータだけでなくそのデータのインデックスを取り出したい時があります。

今回は、for文でデータのインデックスを取得する方法とその応用について説明します。

リストを使ったfor文でインデックスを取得する

for文の中でも、特にリストやタプルを使うfor文では、そのインデックスを利用したい時があります。そこで、Pythonのfor文には取り出している要素のインデックスを取り出す方法が用意されています。

rangeを使った方法

Pythonのfor文ではrange関数を使ってループをするのが一般的ですが、そのrangeを使ってインデックスを取り出す事が出来ます。

リストから直接データを取り出すのではなく、 len()関数でリストの長さを取り出し、その分だけループを回します。すると、その時の変数1の値がインデックスとなりますので、for文内でそのインデックス番目の要素を取り出して別の変数に格納し、最後に一緒に出力しています。

この方法でもちゃんとインデックスを取り出せます。しかし、少し読みづらいコードになってしまいますね。それに、リストの要素を取り出すのがメインなのに、直接リストでループをしていないのは、違和感を感じます。

実行結果

0:python
1:Hello
2:world

enumerateを使った方法

さきほどはrangeを使ってインデックスを取り出しましたが、とても読みづらいコードになってしまいました。そこでPythonには、スッキリとしたコードでインデックスを取り出すための関数が用意されています。それがenumerateです。

enumerate関数を使うと、要素のインデックスと要素を同時に取り出す事が出来ます。インデックスが変数1、要素が変数2に格納されます。rangeを使った方法と比べると行数が少なくスッキリとしていて、とても見やすいコードになっています。インデックスを取り出すことは、なるべくenumerate関数を使いましょう。

実行結果

0:python
1:Hello
2:world

2つのリストを平行にループする

通常、for文では1つのリストからデータを取り出していきますが、実は2つ以上のリストを平行で同時にループすることができます。

rangeを使う

通常のfor文通り、rangeを使って2つのリストをループすることができます。

len関数で取りだしたリスト1の長さの分だけループを回します。するとその時の’変数’の値がインデックスと同等なので、各リストの変数番目の要素を取り出せば、2つのリストをループすることができます。

実行結果

list1:python, list2Python
list1:Hello, list2programming
list1:world, list2beginner

ちゃんと2つのリストでループを回し、両方の要素を出力できています。しかし、rangeを使った方法では、やはり読みづらいコードになっていますね。

enumerateを使う

次に、考えられるのが、さきほどのenumerateを使う方法です。

enumerate関数では、取り出した要素のインデックスを取り出す事が出来ます。それを利用することで、リスト2の要素を取り出しています。rangeを使うよりはコードも短くなりマシに見えますが、2つの変数をバラバラに使うので、見づらいですしこんがらがってしまいそうですね。

実行結果

list1:python, list2:Python
list1:Hello, list2:programming
list1:world, list2:beginner

zip関数を使う

rangeおよびenumerateを使って2つのリストをループする方法は、見づらいだけではなく、もう一つ問題があります。それは、2つのリストの長さが違う場合、エラーになることがあります。

実行結果

print(‘list1:{0}, list2:{1}’.format(j, list2[i]))
IndexError: list index out of range

この例では、list1が長さ4なので、ループを4回繰り返します。しかし、list2は長さが3なので、これではループの4回目に要素の参照ができないため、エラーになります。つまり、rangeおよびenumerateを使う場合はリストの長さを考慮しないといけないので、少し煩わしいです。

コードの読みづらさとリストの長さを考慮しないといけない問題を解決するために、2つのループを回すときは、zip関数を使うのが良いでしょう。

zip関数を使うと、2つ以上のリストから各要素を取り出し、リスト1の要素は変数1へ、リスト2の要素は変数2へ、それぞれ格納してくれます。非常にコードがスッキリして見やすいですね。さらに、リストの長さが違う場合は自動で短いリストの長さに合わせてくれるので、リストの長さをいちいち考える必要もありません。

実行結果

python, Python
Hello, programming
world, beginner

おわりに

for文などを用いてリストから値を取得する場合、値しか取得することができません。enumerateを利用する事でインデックスと値を同時に取り出せ、zipを利用することで同時に2つの配列を使用することができます。これらを利用することで簡潔にコーディングしやすくなります。ぜひ覚えておきましょう。

投稿者:プロスタ編集部

  • このエントリーをはてなブックマークに追加

おすすめスクール

全国30校舎で展開されるヒューマンアカデミーのWeb講座は修了者数4万人超、講師とカリキュラムの満足度がどちらも9割を超えています。就職や転職に必要なレベルの実務スキルを身に付けられます。

WebCampは、一ヶ月の短期集中でWebデザイン、プログラミングスキルを習得するスクールです。学習効果の高い反転授業(自主学習でインプット、講義でアウトプット)を採用し、年間1000名を輩出しています。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

イチ押しランキング

1リナックスアカデミー

リナックスアカデミー

2システムアーキテクチュアナレッジ

システムアーキテクチュアナレッジ

3WEB塾

WEB塾

メールマガジン

ページ上部へ戻る