【Python 雑談・雑学】 ループ処理でインデックス番号が使いたいのなら enumerate() を使えば? 投稿一覧へ戻る

Tags: generator , miscellaneous , enumerate , python

Published 2020年5月26日21:45 by T.Tsuyoshi

次のような処理をしています。

top_friends = ['Nana', 'Saki', 'Yuka']

print(f'My top 1 friend is {top_friends[0]}.')
print(f'My top 2 friend is {top_friends[1]}.')
print(f'My top 3 friend is {top_friends[2]}.')



こんなに print() 文を羅列するのではなくて for ループを使いますよね。


for i in range(3):
print(f'My top {i + 1} friend is {top_friends[i]}.')



この for 文ではインデックス番号を利用してリストから値を取り出しています。


このような場合は、わざわざ range() 等を使用してインデックス番号を取得するよりも、enumerate() を利用したほうがスマートです。


for i, friend in enumerate(top_friends):
print(f'My top {i + 1} friend is {friend}.')



ちなみに enumerate() は generator を返します。
ですから、next() を利用して値を1つずつ取り出すことができます。


friend_g = enumerate(top_friends)
print(next(friend_g))



next(friend_g) で取り出される値は (index, value) からなるタプルです。
ですから当然アンパックも利用できます。

index, friend = next(friend_g)
print(index)
print(friend)

この投稿をメールでシェアする

0 comments

コメントはまだありません。

コメントを追加する(不適切と思われるコメントは削除する場合があります)