Pythonにおける繰り返し(ループ)のfor文は、in演算子を使った処理が基本です。
他にも、range関数を使う処理も重宝しますよね。
実は、range関数以外にも関数を組み合わせた便利な方法があります。
この記事では、Python で「enumerate関数」と「zip関数」を組み合わせた in演算子の使い方をご紹介します。
対象者は Python で for文 の基本が理解できている方を推奨しますが、良く分からない方でも理解できるように丁寧に解説します。
for文について、こちらの記事が参考になります。
イメージをつかんでもらえるように例題を載せていますので、初心者の方も安心してご覧下さい。
なお、本記事と同じ内容で動画も公開しています。
for文でin演算子を使った処理の基本
まずは、for文の基本であるin演算子を使った処理の基本を確認しましょう。
data = ['りんご', 'すいか', 'めろん']
for i in data:
print(i)
上の例では、リストdataに3つの要素が入っています。
これをfor~inで一つずつ取り出しprintしています。
りんご
すいか
めろん
以上のように、in演算子を使うことで、リストから要素を順に取り出すという処理が簡単にできますね。
では、これを元に関数と組み合わせた処理を見てみましょう。
enumerate関数の基本
まずは、enumerate関数の基本を理解しましょう。
enumerate関数は単体でも使用できますが、for文と組み合わせることが有効です。
下の例では、リストfruitsの中から要素を順に取り出す際、indexを付けてprintしています。
fruits = ['りんご', 'すいか', 'めろん']
for index, fruit in enumerate(fruits):
print(index, ':', fruit)
このように、for文で値を取り出す際に値とインデックス番号を取り出しながらループすることができます。
0 : りんご
1 : すいか
2 : めろん
enumerate関数に第二引数を指定する
上の例では、index番号は0から始まります。
その際、indexの開始番号を指定することができます。
fruits = ['りんご', 'すいか', 'めろん']
for index, fruit in enumerate(fruits, 1):
print(index, '番目は', fruit, 'です')
こうすることで、人間にとって自然な「1番目」「2番目」…という順番を表す処理が可能です。
1 番目は りんご です
2 番目は すいか です
3 番目は めろん です
enumerate関数を使った実例
上の例を使って、もう少し実用的な処理をご紹介します。
if文と組み合わせることで、特定の値を探すという処理が可能になります。
fruits = ['りんご', 'すいか', 'めろん']
search_fruit = 'すいか'
for index, fruit in enumerate(fruits, 1):
if fruit == search_fruit:
print(f'「{search_fruit}」は{index}番目です')
上の例では、リストfruits の中から 変数search_fruit に代入した「すいか」を探しています。
if文の条件「fruit == search_fruit」により、
リストfruits から要素を取り出しながら、一時変数fruit と変数search_fruit が等しいかを確認し、等しい場合はその順番を表すことができます。
「すいか」は2番目です
なお、enumerate関数の第二引数を「1」とすることで、indexを1番から開始しています。
zip関数
次に、zip関数を使ってみましょう。
zip関数は、for文で要素を取り出す際に複数のリストを束ねて処理することができます。
item_no = ['202301', '202302', '202303']
items = ['りんご', 'すいか', 'めろん']
for no, item in zip(item_no, items):
print(no + 'は' + item + 'です')
上の例では、2つのリスト「item_no」と「items」から順番に要素を取り出し、それぞれ一時変数「no」と「item」に入れてprintしています。
実行結果は以下の通りです。
202301はりんごです
202302はすいかです
202303はめろんです
また、zip関数は2つ以上ならいくつでも組み合わせることができます。
例えば以下のように3つのリストを組み合わせることも可能です。
item_no = ['202301', '202302', '202303']
items = ['りんご', 'すいか', 'めろん']
prices = ['300', '600', '1000']
for no, item, price in zip(item_no, items, prices):
print(no + 'は' + item + 'で価格は' + price + '円です')
実行結果は以下の通りです。
202301はりんごで価格は300円です
202302はすいかで価格は600円です
202303はめろんで価格は1000円です
これを応用すると、
- 複数のファイルに記録された情報を結合する
- ウェブスクレイピングで複数のサイトから情報を取得し、組み合わせる
- バラバラの情報を整理する
などの高度な処理が実現可能となります。
可能性は無限大である、ということがお分かりいただけたでしょうか?
まとめ
今回は、Python で「enumerate関数」と「zip関数」を組み合わせた in演算子の使い方をご紹介しました。
「知らなかった」「使ったことが無い」という方は、ぜひ試してください。
Python で for文 を使ったリスト処理について、こちらの記事でも紹介しています。
今後も便利で面白い実装方法やPythonを中心としたプログラミングの情報をお届けします。
以下のメルマガにご登録頂くと、不定期に配信をお届けします。
ぜひ購読してください!
それでは、ステキなPythonライフを!
もっと詳しく知りたいという方は、こちらの書籍もおススメです。