Pythonの「enumerate関数」について、よくわからない方もいるかもしれません。
enumerateは英語で「列挙する」という意味で、特定の語句や項目などにインデックス番号を与えます。こちらを有効活用できれば、リスト作成に役立つでしょう。
今回は、プログラミング関数を勉強中の方のために、enumerateの定義や使い方をまとめました。この記事を読んで、プログラミングの新しいテクニックを実践してみましょう。
Pythonのenumerate関数とは
enumerate関数とは、Python標準の関数の一種です。
こちらはfor文内で利用可能で、ループ処理時にインデックス番号を追加できます。
特定の事物に番号を与え、情報整理へつなげるしくみです。
ユーザーはenumerate関数を利用することで、リスト作成を簡単に済ませることができるでしょう。
enumerateは、ブログラミング初心者でも簡単に利用可能です。
Pythonの実行環境さえあれば、すぐに使えます。
enumerate関数の設定に関しては、以下のサンプルコードを参照してください。
my_array = [ '1番目', '2番目', '3番目']for i, d in enumerate(my_array): print('インデックス: ' + str(i) + ' 内容: ' + d )
その結果、以下の通りに表示されます。
インデックス: 0 内容: 1番目インデックス: 1 内容: 2番目インデックス: 2 内容: 3番目
enumerate関数を使えば、シンプルな構文でリストを作れるうえ、関数自体に制御をまかせることができるでしょう。
Pythonにおけるenumerateの基本的な使い方
enumerate関数は、さまざまなシチュエーションで利用可能です。
この章では、リスト内容や辞書内容の取得で見ていきましょう。
リスト内容の取得
enumerate関数を使えば、リストの内容を一気に取得できます。
コード設定の方法は以下のとおりです。
numbers = [1, 2, 3, 4, 5]for i in enumerate(numbers): print(i)
設定の結果は以下になります。
(0, 1)(1, 2)(2, 3)(3, 4)(4, 5)
特段の設定がなければ、リストの番号が0から始まる点に要注意です。
しかし、設定数に合わせてリストアップが決まるので、プログラミングをするうえでは便利といえるでしょう。
indexと値の個別取得では、以下のように設定してください。
fruits = ['pencil', 'eraser', 'crayon']for i, j in enumerate(fruits): print(i,j);
結果は以下のとおりです。
0 pencil1 eraser2 crayon
このように一度の操作で、リストの値をひととおり取得できます。
辞書内容の取得
enumerate関数では辞書内容の取得も可能です。
辞書のサンプルコードがわかれば、取得準備へ移れるでしょう。
X3 = {"diamond":"pw1", "topaz":"pw2", "emerald":"pw3","ruby":"pw4"} for k,v in enumerate(X3): print(k,v)
このコードの実行結果は、以下のとおりです。
0 diamond1 topaz2 emerald3 ruby
enumerate関数を辞書型として使った場合、表示されるのは辞書型のkeyです。
for文で使った場合、valueではなくkeyを返すことになります。
こちらに注意しないと、思いどおりの文字列を得られないかもしれません。
しかし、enumerate関数を使えば、辞書の内容まで取得できるため、情報整理に役立つでしょう。
Pythonにおけるenumerateの有効活用法
enumerateの使い方に慣れれば、発展的な用途も実践可能です。
この章では、for文との組み合わせや、ほかの関数との併用をチェックしてみましょう。
for文と組み合わせて使う
enumerate関数は、for文とのセット活用がほとんどです。
まずは基本構文として、以下の形式を覚えてください。
my_array = ['dog', 'cat', 'rabbit']for i, val in enumerate(my_array): print(type(i)) print(i) print(type(val)) print(val) print('------')
実行結果は以下のとおりです。
<class 'int'>0<class 'str'>dog------<class 'int'>1<class 'str'>cat------<class 'int'>2<class 'str'>rabbit------
設定構文の「for i, val in enumerate(my_array):」のうち、iはインデックスの変数ですが、indexやcountのように変数名は好きなものを使えます。
また、valは配列内要素の割り当て変数で「my_array」が配列の意思表示です。
インデックス番号のデータ型の出力形式は数値型(int)なので、必要なら文字型(str)など別形式へ組み替えましょう。
一般的にenumerate関数は、インデックスと要素を別々に取るので、以下のサンプルを参考にしてください。
my_array = ['rice', 'bread', 'salad']for i, val in enumerate(my_array, 1): print( str(i) + ' ' + val )
上記の場合、表示結果は以下のとおりです。
1 rice2 bread3 salad
またインデックスと要素の同時取得では、以下のように設定してください。
my_array = [ '店舗A', '店舗B', '店舗C']for d in enumerate(my_array, 1): print( d )
上記サンプルの設定では、以下のようにタプル型の出力結果が示されます。
(1, '店舗A')(2, '店舗B')(3, '店舗C')
ほかの関数との組み合わせ
enumerateは、ほかの関数との組み合わせが可能です。
たとえばzip関数との併用は、以下のように行います。
my_array_1 = ['日本', 'ドイツ', 'アメリカ']my_array_2 = ['東京', 'ベルリン', 'ワシントン']for i, (prefucture, noodles) in enumerate(zip(my_array_1, my_array_2)): print(i, prefucture, noodles)0 日本 東京1 ドイツ ベルリン2 アメリカ ワシントン
enumerate関数の使い方に慣れれば、以上のような応用もこなせるでしょう。
Pythonにおけるenumerate関数使用時の注意点
enumerate関数を使うときは、さまざまな注意点があります。
使い方が間違っていると、エラーが出力される点に要注意です。
ここでは、3つの注意点を紹介します。
第一引数の利用範囲は限られている
enumerate関数の場合、イテラブルオブジェクトでなければ、第一引数を使えません。
このオブジェクトは繰り返し処理可能な要素を意味しています。
たとえば、配列や辞書型、文字型などはenumerate関数による処理が可能です。
しかし、float型や数値型はイテラブルオブジェクトではないため、enumerate関数との併用ができません。実行しようとすると、エラーが出力されるので気をつけてください。
インデックス番号は1ずつ上げる
インデックス番号は、基本的に1ずつ上げるしくみです。
enumerate関数の使用中、インデックス番号を複数上げたい方もいるでしょう。
その場合は、別数字の追加をしてください。
たとえば3ずつ上げる場合、コード例は以下のとおりです。
my_array = ['dog', 'cat', 'rabbit']count = 0for i, val in enumerate(my_array, 1): print( str( i+count ) + ' ' + val ) count+=2
上記コードでは、以下の結果が出ます。
1 dog4 cat7 rabbit
インデックス番号を複数上げるなら「count+=」の数字は「希望数-1」を付与してください。
インデックス番号の変数がなければタプル型になる
インデックス番号用の変数はiが一般的である一方、使わない場合は以下のような状況になります。
my_array = [ '東京', '神奈川', '千葉']for d in enumerate(my_array): print( d )
結果は以下のとおりです。
(0, '1番目')(1, '2番目')(2, '3番目')
このようにenumerate関数でインデックス番号用の変数を使わないと、出力はタプル型で行われます。
Pythonのenumerateのまとめ
enumerate関数は、特にリスト化に役立ちます。
基本的にはfor文で用いる一方、シンプルな用途で初心者でも使いやすいでしょう。
使い方を覚えれば、ほかのデータ型や関数にも組み込めます。
enumerate関数を使いこなせば、データ整理が容易になるでしょう。