IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

Pythonのenumerate関数とは?使い方をわかりやすくご紹介

Pythonでリストやタプルなどの配列を処理する際、要素と一緒にインデックス番号が必要になることは多々あります。

Python言語には、インデックス情報を簡単に扱える便利な関数として、enumerate関数があります。enumerateを使うと、コードがすっきりとした形で記述でき、可読性が向上します。

本記事では、enumerate関数の基礎から実践的な使用方法まで、サンプルコードを交え、詳しく説明します。

Pythonのenumerateとは?

Pythonのenumerate関数は、リストやタプルなどの反復可能なオブジェクトの要素に、連番(インデックス)を付与して取得できる便利な関数です。

配列の要素を処理する際に、要素の値だけでなくインデックス番号も同時に必要になることがあります。enumerate関数を使用すると、インデックス番号と要素を1つの処理でまとめて取得できます。

例えば以下のようなコードで利用できます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

for index, fruit in enumerate(fruits):

    print(f’{index}番目: {fruit}# インデックスと要素を同時に出力

enumerateを使用するメリット

enumerate関数には3つのメリットがあります。

1つ目は、コードがシンプルになることです。通常、インデックスを管理する変数を別途用意する必要がありますが、enumerateを使えば、1行でインデックスと要素を取得できます。

2つ目は、バグの防止です。手動でインデックスを管理すると、初期化忘れやカウントアップのミスが発生する可能性もありますが、enumerateを使えばミスを防げます。

3つ目は、可読性の向上です。enumerate関数を使うと、「インデックス付きで要素を処理している」プログラムの意図が明確になり、コードの保守性も高まります。

enumerateの基本構文について

基本的な構文は以下のようになります。

enumerate(イテラブルオブジェクト, start=開始番号)

# イテラブルオブジェクトは、list, tuple, dict, set, 文字列など

start引数でインデックスの開始番号を指定できます。省略した場合は0から開始します。

戻り値はenumerateオブジェクトとなり、for文で使用すると(インデックス, 要素)のタプルとして取得できます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

for indexed_tuple in enumerate(fruits):

    index, fruit = indexed_tuple    # タプルをアンパック

    print(f’{index}番目: {fruit})

通常はfor文でアンパックもおこない、下記のように書きます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

for index, fruit in enumerate(fruits):

    print(f’{index}番目: {fruit})

# 出力例

# 0番目: りんご

# 1番目: みかん

# 2番目: 白桃

enumerateの基本的な使い方と出力例

enumerate関数の基本的な使い方と例を見ていきましょう。

リストの要素をインデックス付きで取得

enumerate関数は、for文と組み合わせることで、リストの要素とインデックスを同時に取得できます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

for i, fruit in enumerate(fruits):

    print(f’{i}: {fruit})

# 0: りんご

# 1: みかん

# 2: 白桃

リスト内包表記と組み合わせることもできます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

indexed_fruits = [f’{i}: {fruit} for i, fruit in enumerate(fruits)]

print(indexed_fruits)  # [‘0: りんご’, ‘1: みかん’, ‘2: 白桃’]

start引数の活用

enumerate関数のstart引数を使うと、インデックスの開始値を0以外の数値に変更できます。

例えば、1から始めたい場合は以下のように記述します。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

for i, fruit in enumerate(fruits, start=1):

    print(f’{i}: {fruit})

# 1: りんご

# 2: みかん

# 3: 白桃

開始値として、負の数も指定できます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

for i, fruit in enumerate(fruits, start=-2):

    print(f’{i}: {fruit})

# -2: りんご

# -1: みかん

# 0: 白桃

enumerateと一緒に使用する関数

Pythonのenumerate関数は他の組み込み関数と組み合わせると、より柔軟なデータ処理が可能になります。

代表的な組み合わせをご紹介します。

zip

enumerate関数とzip関数を組み合わせると、複数のイテラブルオブジェクトを同時に処理できます。

names = [‘大黒天’, ‘弁財天’, ‘福禄寿’]

ages = [25, 30, 35]

# inの直前のnameとage側に丸括弧が必要です。

for i, (name, age) in enumerate(zip(names, ages)):

    print(f’{i}番目: {name}さん {age}歳’)

# 0番目: 大黒天さん 25歳

# 1番目: 弁財天さん 30歳

# 2番目: 福禄寿さん 35歳

list

enumerate関数の結果をlist関数で変換すると、インデックスと要素のペアをリストとして保存できます。

fruits = [‘りんご’, ‘みかん’, ‘白桃’]

fruit_list = list(enumerate(fruits))

print(fruit_list) # [(0, ‘りんご’), (1, ‘みかん’), (2, ‘白桃’)]

dict

enumerate関数とdict関数を組み合わせることで、インデックスをキーとした辞書を作成できます。

colors = [‘赤’, ‘青’, ‘緑’]

color_dict = dict(enumerate(colors))

print(color_dict) # {0: ‘赤’, 1: ‘青’, 2: ‘緑’}

まとめ

Pythonのenumerate関数は、リストやタプルの要素に連番を付与できる便利な機能です。コードの簡潔化、バグ防止、可読性向上の3つのメリットがあり、start引数で開始番号も自由に設定できます。

他の関数との組み合わせも柔軟にできるので、ぜひ実際のコーディングで活用してみてください。