【簡単】Python enumerate関数の使い方を実例付で解説

Python

(最終更新月:2022年12月)

✔このような方へ向けて書かれた記事となります

「enumerate関数って何ができるの?」

「enumerate関数の使い方は?」

「enumerate関数の実例が見てみたい!」

✔当記事を通じてお伝えすること

  • enumerate関数とは
  • enumerate関数でできること
  • enumerate関数を使った実例

当記事では、enumerate関数の基本はもちろん、できることのすべてを実例付きで紹介しています。

ぜひ最後までご覧ください。

profile_icon

【Python歴】10年 x 【営業マン歴】11年

HP作成、社内システムの構築、コンサルティング

Pythonベースのフレームワーク 「Django」を使って下記のようなサイトを作っています!

日報アプリ
当ブログで一から開発方法を解説している日報アプリ(デモ版)です
ツールアプリ
当ブログで紹介したPythonアプリのWeb版です。DjangoAPIとReactで開発。随時更新中です。

Pythonのenumerate関数の基本事項3選

Pythonのenumerate関数についての基本を見ていきましょう。

使い方を覚える前にまずは、抑えるべき事項が3つあります。

  • enumerate関数とは
  • enumerate関数を使う場所
  • enumerate関数を使うメリット

enumerate関数とは

enumerate関数とは、配列などを展開するときに、インデックスを割り振るものです。

なぜ必要なのかというと、Pythonで配列を展開すると、要素そのものが取り出され、インデックスが取得できないから。

インデックスとは、配列の中での順番のことなので、enumerateを使うと要素の順番が取得できるのです。

enumerate関数を使う場所

enumerate関数を使える場所は以下の2つ。

  • for文
  • 内包表記

配列などを展開するときに使えるのが、enumerate関数です。

enumerate関数を使うメリット

enumerate関数を使うメリットをご紹介します。

メリットを理解すれば、使うべき場面が想像できるでしょう。

  • indexが分かるので要素を書き換えられる
  • 条件分岐がしやすい

配列を通常通り展開しても、出てきた要素を直接書き換えられません

以下のようにすることで、要素の書き換えが可能になるのです。

sns = ["twitter", "facebook", "instagram", "youtube", "line"]

#"youtube"を"tiktok"に書き換える
for index, s in enumerate(sns):
    if s=="youtube":
        sns[index] = "tiktok"

print(sns)
['twitter', 'facebook', 'instagram', 'tiktok', 'line']

Pythonのenumerate関数でできることとその実例

enumerate関数でできることを見ていきます。

実はいろいろなことができるので、すべてに目を通しておきましょう

for文でインデックスを取得する

enumerate関数を使って、インデックスを取得できます。

for インデックスの変数, 値の変数 in enumerate(配列):

>>> sns = ["twitter", "facebook", "instagram", "youtube", "line"]
>>> for index, s in enumerate(sns):
...     print(f"要素{index}:{s}")
... 
要素0:twitter
要素1:facebook
要素2:instagram
要素3:youtube
要素4:line

インデックスを1から(0以外)から始める

インデックスのスタート値を0以外でも始められます。

enumerate関数の第二引数に指定するのです。

for インデックスの変数, 値の変数 in enumerate(配列, 始めたい値):

>>> sns = ["twitter", "facebook", "instagram", "youtube", "line"]
>>> for index, s in enumerate(sns,1):
...     print(f"要素{index}:{s}")
... 
要素1:twitter
要素2:facebook
要素3:instagram
要素4:youtube
要素5:line

インデックスの増分を指定する

インデックスに増分(step)を指定する方法は、forループ内でおこないます

>>> sns = ["twitter", "facebook", "instagram", "youtube", "line"]
>>> step = 5
>>> for index, s in enumerate(sns):
...     print(f"増分済要素{index * step}:{s}")
... 
増分済要素0:twitter
増分済要素5:facebook
増分済要素10:instagram
増分済要素15:youtube
増分済要素20:line

逆順で取得する:reversed関数

reversed関数を使って、逆順に取得する方法は以下の2とおり。

  • 要素だけ逆順
  • インデックスと要素ともに逆順

要素だけ逆順

for インデックスの変数, 値の変数 in enumerate(reversed(配列)):

>>> sns = ["twitter", "facebook", "instagram", "youtube", "line"]
>>> for index, s in enumerate(reversed(sns)):
...     print(f"要素{index}:{s}")
... 
要素0:line
要素1:youtube
要素2:instagram
要素3:facebook
要素4:twitter

enumerate関数内で、reversedをおこないます。

インデックスと要素ともに逆順

for インデックスの変数, 値の変数 in reversed(list(enumerate(配列))):

>>> sns = ["twitter", "facebook", "instagram", "youtube", "line"]
>>> for index, s in reversed(list(enumerate(sns))):
...    print(f"要素{index}:{s}")
... 
要素4:line
要素3:youtube
要素2:instagram
要素1:facebook
要素0:twitter

先にenumerateをおこないリスト化のうえ、reversed関数を使います。

複数の配列と同時に取得する:zip関数

複数の配列を組み合わせて展開するzip関数との組み合わせです。

for インデックスの変数, (値1の変数,値2の変数) in enumerate(zip(配列1, 配列2)):

>>> sns = ["twitter", "facebook", "instagram", "youtube", "line"]
>>> companies = ["Twitter", "Meta", "Meta", "Google", "Line"]

>>> for index, (s, company) in enumerate(zip(sns, companies)):
...     print(f"要素{index}:{company}の{s}")
... 
要素0:Twitterのtwitter
要素1:Metaのfacebook
要素2:Metaのinstagram
要素3:Googleのyoutube
要素4:Lineのline

辞書(dict)にインデックスを割り振り、取得する

辞書にインデックスを割り振る方法として、以下の3つをご説明します。

  • キーだけを取り出す場合
  • 値だけを取り出す場合
  • キーと値の両方を取り出す場合

辞書はキーと値が存在し、それぞれの扱い方があるのです。

こちらの辞書を使います。

sns_dict = {
             'twitter': 'Twitter', 
             'facebook': 'Meta', 
             'instagram': 'Meta', 
             'youtube': 'Google', 
             'line': 'Line'
            }

キーだけを取り出す場合

辞書をそのまま引数で渡します。

for インデックスの変数, 変数 in enumerate(辞書):

>>> sns_dict = {'twitter': 'Twitter', 'facebook': 'Meta', 'instagram': 'Meta', 'youtube': 'Google', 'line': 'Line'}
>>> for index, key in enumerate(sns_dict):
...     print(f"要素{index}:{key}")
... 
要素0:twitter
要素1:facebook
要素2:instagram
要素3:youtube
要素4:line

値だけを取り出す場合

valuesメソッドを使います。

for インデックスの変数, 変数 in enumerate(辞書.values()):

>>> sns_dict = {'twitter': 'Twitter', 'facebook': 'Meta', 'instagram': 'Meta', 'youtube': 'Google', 'line': 'Line'}
>>> for index, value in enumerate(sns_dict.values()):
...     print(f"要素{index}:{value}")
... 
要素0:Twitter
要素1:Meta
要素2:Meta
要素3:Google
要素4:Line

キーと値の両方を取り出す場合

itemsメソッドを使います。

for インデックスの変数, (キーの変数, 値の変数) in enumerate(辞書.items()):

>>> sns_dict = {'twitter': 'Twitter', 'facebook': 'Meta', 'instagram': 'Meta', 'youtube': 'Google', 'line': 'Line'}
>>> for index, (key,value) in enumerate(sns_dict.items()):
...     print(f"要素{index}:{value}の{key}")
... 
要素0:Twitterのtwitter
要素1:Metaのfacebook
要素2:Metaのinstagram
要素3:Googleのyoutube
要素4:Lineのline

内包表記内で2次元配列を生成

内包表記で新たな配列も作れます。

sns = ['twitter', 'facebook', 'instagram', 'youtube', 'line']
>>> new_list = [[index, s] for index, s in enumerate(sns)]
>>> print(new_list)
[[0, 'twitter'], [1, 'facebook'], [2, 'instagram'], [3, 'youtube'], [4, 'line']]

Pythonのfor文で使えるenumerate以外の関数3選

for文内で使える関数をご紹介します。

enumerateを覚えるのであれば、一緒に覚えておくと後々便利です。

  • range関数
  • zip関数
  • zip_longest関数
  • reversed関数

range関数

range関数は、イテラブルな数値の集合体を生成できるメソッドです。

for i in range(10, 20):

enumerate関数と組み合わせて使うこともできます。

>>> for index, num in enumerate(range(101, 115)):
...     print(f"{index}番目は、{num}です")
... 
0番目は、101です
1番目は、102です
2番目は、103です
3番目は、104です
4番目は、105です
5番目は、106です
6番目は、107です
7番目は、108です
8番目は、109です
9番目は、110です
10番目は、111です
11番目は、112です
12番目は、113です
13番目は、114です

zip関数

zip関数は、複数の配列をまとめる関数です。

注意点としては、配列内の要素が異なる場合、はみ出した要素は削除されます

>>> list1 = ["Google", "Meta"]
>>> list2 = ["YouTube", "Facebook", "Instagram"]
>>> list(zip(list1, list2))
[('Google', 'YouTube'), ('Meta', 'Facebook')]

zip_longest関数

zip_longestは、zip関数と似ていますが、要素数が多い方に合わせます

少ない方の値は、「None」になります。

>>> from itertools import zip_longest
>>> list1 = ["Google", "Meta"]
>>> list2 = ["YouTube", "Facebook", "Instagram"]
>>> list(zip_longest(list1, list2))
[('Google', 'YouTube'), ('Meta', 'Facebook'), (None, 'Instagram')]

zip_longestは、itertoolsからのインポートを忘れずに!

reversed関数

reversed関数は、配列を逆順にするもの。

>>> num_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in reversed(num_list):
...     print(i)
... 
9
8
7
6
5
4
3
2
1
0

まとめ:

当記事でご紹介したenuerate関数でできることは以下のとおり。

enumerate関数は、配列などを展開する際にインデックスを割り振る関数。

いろいろな場面で使えるので、ぜひここでマスターしてしまいましょう。

✔当ブログは以下のような方に向けて書かれています

「Djangoでのアプリ開発を学びたい!」

「Djangoで開発したアプリをWebで公開するにはどうするの?」

✔当ブログ掲載の記事

  • Djangoで作る日報アプリ開発
  • WebアプリをWeb上に公開する方法
  • Webアプリ開発に必要なそのほかの情報
【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

ITCブログにご協力いただける方は、以下もご検討いただけると嬉しいです。

ITCへ投げ銭をする

タイトルとURLをコピーしました