スライドショー

【Python入門】enumerate関数とfor文でindexを取得しよう

Pythonのfor文リスト型や辞書型をループ毎に受け取って処理します。

その際にindexも一緒に受け取りたい、と思う人も多いかと思います。

enumerateの基本的な使い方を知りたい
enumerateでリストや辞書のindexを取得したい

といった方に向けて、この記事では、

【基礎】enumerate関数とは
【実践】enumerate関数の使い方
【実践】zip関数とzip_longest関数の使い方

について解説していきます。

enumerateやzipなどはリスト型や辞書型の要素を取得するときに非常に便利ですので、この機会に使い方を理解しておきましょう!

※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。

enumerate関数とは

enumerate関数は、for文のループ処理でリスト型や辞書型の要素とindexを同時に取得したい場合に使います。

enumerate関数はこのように引数にindexを取得したいリストを指定します。

enumerate(リストオブジェクト)

ここではenumerate関数を使う前に、for文とvaluekeyの違いについておさらいしておきましょう。

for文の基本的な形はこのようになっています。

for 変数 in シーケンス:
    繰り返し処理したいコード

for文についてはこちらの記事で詳しく解説されているのでぜひご覧ください。

【Python入門】for文による繰り返し処理まとめ
更新日 : 2019年7月1日

また、indexvalueについても学んでおきましょう。

リスト型では、

mylist = ['apple', 'strawberry', 'watermelon']

という形で要素が格納されています。

この場合、

indexが0のvalueはapple
indexが1のvalueはstrawberry
indexが2のvalueはwatermelon

になります。

辞書型の場合は、indexの変わりに、keyがあります。

辞書型では、

mydict = {1:'apple', 2:'strawberry', 5:'watermelon'}

という形で要素が格納されています。

この場合、

keyが1のvalueはapple
keyが2のvalueはstrawberry
keyが5のvalueはwatermelon

になります。

リスト型と辞書型について詳しく知りたい方は、それぞれこちらの記事をご覧ください。

【Python入門】listの使い方とメソッドまとめ
更新日 : 2019年7月30日
【Python入門】dictionary(辞書)の使い方。基本と応用
更新日 : 2019年7月30日

enumerate関数の使い方

ここからは実際にindexを受け取る方法について見ていきましょう。

enumerate関数はfor文と一緒によく使われます

こちらのサンプルコードをご覧ください。

X = range(10, 20)
 
for i,v in enumerate(X):
    print(i,v)

実行結果

0 10
1 11
2 12
3 13
4 14
5 15
6 16
7 17
8 18
9 19

このコードで、Xは10から19までの要素を生成するオブジェクトを持つ変数になります。

for文で使われているenumerate関数は、与えられたシーケンスイテレータのindexと値を一緒に返してくれる機能があります。

そしてこの関数は(index, value)の組み合わせを、呼び出される度に順々に返してくれます。

後は、このiとvをprint関数で表示することで関数の動きを確認することが出来ます。

また、enumerate関数はもちろんrange関数だけでなく、リストや辞書のような型のシーケンスを同じように扱うことが出来ます。

リストの内容を取得する

ここではリストの内容をenumerate関数で一度に取得する方法を見てみましょう。

こちらのコードをご覧ください。

numbers = [1, 2, 3, 4, 5]
for i in enumerate(numbers):
    print(i)

実行結果

(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)

このようにenumerateでリストを指定すると、indexと値が取得することができます。

indexと値を個別に取得したい場合は、このように指定します。

fruits = ['apple', 'orange', 'banana']
for i, j in enumerate(fruits):
    print(i,j);

実行結果

0 apple
1 orange
2 banana

このようにリストの値が一度に取得できていることがわかりますね!

辞書の内容を取得する

続いて辞書のサンプルコードを見てみましょう。

X3 = {"taro":"pw1", "hanako":"pw2", "itiro":"pw3","yui":"pw4"}
 
for k,v in enumerate(X3):
    print(k,v)

実行結果

0 taro
1 hanako
2 itiro
3 yui

辞書型とenumerate関数の組み合わせでは辞書型のkeyを表示しています。

辞書型オブジェクトはfor文に渡すとvalueではなくkeyを返すことに気をつけましょう。

zip関数、zip_longest関数の使い方

zip関数は、複数のリスト型を一度に扱うことが出来る関数です。

詳しくはこちらの記事をご覧ください。

【Python入門】zip関数の使い方をわかりやすく解説!
更新日 : 2019年1月23日

zip関数を使うとリストの要素の数がバラバラでも、数が少ない方のリスト自動的に合わせてくれます

要素の多いリストに合わせたい場合は、zip_longest関数を使うとよいでしょう。

こちらのサンプルコードを見てみましょう。

from itertools import zip_longest
 
list1 = [1,2,3,4,5,6,7,8,9,10]
list2 = ['a','b','c','d','e']
 
for i,j in zip_longest(list1,list2):
    print('{0}, {1}'.format(i, j))

実行結果

1, a
2, b
3, c
4, d
5, e
6, None
7, None
8, None
9, None
10, None

zip_longest関数を使うと、要素の多いリストに合わせてタプルが作られます。

対応する要素がない場合は、「None」が含まれます。

zip_logest関数を使うためには、itertoolsという標準モジュールをimportする必要があるので気をつけましょう。

まとめ

この記事では、for文でリストや辞書の各要素だけでなくindexやkeyを返す方法について説明しました。

・enumerate関数はリストや辞書などのシーケンスのindexを受け取るときに使う関数
・zip関数、zip_longest関数は複数のリストを一度に扱うことが出来る関数

ということをぜひ覚えておきましょう。

中でもenumerate関数はとても使用頻度が高い関数だと思うので、ぜひ使ってみてください。

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説