forでindexと要素を取得する enumerate() - Python
forで要素とその要素のインデックス番号を取得したいときにはenumerate()
関数を使う。
>>> for i, fruit in enumerate(['apple', 'banana', 'peach']): ... i, fruit ... (0, 'apple') (1, 'banana') (2, 'peach')
受け取る側の1つ目の変数にインデックス番号、2つ目の変数に要素の値が格納される。
enumerate()関数すごい!!
また、第2引数のstart
でインデックスの数値の開始を指定することもできる。デフォルトでは0
になっている。
>>> for i, fruit in enumerate(['apple', 'banana', 'peach'], start=1): ... i, fruit ... (1, 'apple') (2, 'banana') (3, 'peach')
zip()関数と組み合わせることもできる。
>>> days = ['月曜日', '火曜日', '水曜日'] >>> fruits = ['バナナ', 'オレンジ', 'リンゴ'] >>> for i, (day, fruit) in enumerate(zip(days, fruits)): ... i, day, fruit ... (0, '月曜日', 'バナナ') (1, '火曜日', 'オレンジ') (2, '水曜日', 'リンゴ')
zip()での格納先が(day, fruit)
、enumerate()の格納先がi, {zip()の結果}
となっていることに注意する。zipについてはここ
enumerate()はただ単にインデックスとイテレータを返していると考えられるため、以下のようにするとエラーになる。
>>> for i, day, fruit in enumerate(zip(days, fruits)): ... i, day, fruit ... Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: not enough values to unpack (expected 3, got 2)