(最終更新月:2022年12月)
✔このような方へ向けて書かれた記事となります
「enumerate関数って何ができるの?」
「enumerate関数の使い方は?」
「enumerate関数の実例が見てみたい!」
✔当記事を通じてお伝えすること
- enumerate関数とは
- enumerate関数でできること
- enumerate関数を使った実例
当記事では、enumerate関数の基本はもちろん、できることのすべてを実例付きで紹介しています。
ぜひ最後までご覧ください。
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文でインデックスを取得する
- インデックスを1から(0以外)から始める
- インデックスの増分を指定する
- 逆順で取得する:reversed関数
- 複数の配列と同時に取得する:zip関数
- 辞書(dict)にインデックスを割り振り、取得する
- 内包表記内で2次元配列を生成
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関数でできることは以下のとおり。
- for文でインデックスを取得する
- インデックスを1から(0以外)から始める
- インデックスの増分を指定する
- 逆順で取得する:reversed関数
- 複数の配列と同時に取得する:zip関数
- 辞書(dict)にインデックスを割り振り、取得する
- 内包表記内で2次元配列を生成
enumerate関数は、配列などを展開する際にインデックスを割り振る関数。
いろいろな場面で使えるので、ぜひここでマスターしてしまいましょう。