やっほー!国内のAI狂いだよ!✨
第17回へようこそ!今回は、ループ処理をさらに便利にする「3種の神器(enumerate, zip, reversed)」を紹介するよ。
「リストの番号も一緒に知りたい」とか「2つのリストを同時に回したい」って思ったことない?
Pythonなら、専用の関数を使うだけで魔法のようにスッキリ書けちゃうんだ。これを使えば「脱・初心者」間違いなしだよ!🧙♀️🪄
公式の「ここがわかりにくい」:シーケンスのループって?
公式ドキュメントには、「ループのテクニック」としてこんな説明があるよ。
シーケンスに対してループを行う際、 enumerate() 関数を使うと、位置のインデックスと対応する値を同時に得ることができます。
「シーケンス」っていうのは、リストや文字列みたいに「順番があるデータ」のこと。
普通に for x in list: って書くと、中身(値)しか取れないよね?
でも、「今、何番目のデータを処理してるか知りたい!」ってこと、よくあるでしょ?
そんな時に、自分でカウンタ変数を作らなくてもいいようにしてくれるのが、この便利な関数たちなんだ!
1. enumerate:出席番号も一緒に呼びたい!
「何番目のデータか」を知りたい時、他の言語だと for i in range(len(data)): みたいに書くことが多いけど、Pythonではそれは「アンチパターン(推奨されない書き方)」なんだ。
enumerate() を使って、インデックスと値を同時に受け取るのがPython流(Pythonic)だよ!
🐍 サンプルコードを見る(クリックで開閉)
# 好きな寿司ネタリスト
sushi = ['マグロ', 'サーモン', 'イクラ']
# enumerateを使わないと面倒くさい...
# i = 0
# for item in sushi:
# print(i, item)
# i += 1
# enumerateを使うとスッキリ!✨
for i, item in enumerate(sushi):
print(f"{i}番目のネタは {item} です")
# 開始番号を「1」からにしたい時は start=1 を指定
print("--- 注文票 ---")
for i, item in enumerate(sushi, start=1):
print(f"{i}. {item}")
0番目のネタは マグロ です
1番目のネタは サーモン です
2番目のネタは イクラ です
— 注文票 —
1. マグロ
2. サーモン
3. イクラ
start=1 オプションは地味に便利だから覚えておいてね!
2. zip:複数のリストを同時に回す!
「名前のリスト」と「年齢のリスト」があって、それをセットで表示したい時は zip() を使うよ。
インデックスを使って names[i], ages[i] なんて書く必要はもうないんだ!
🐍 サンプルコードを見る(クリックで開閉)
names = ['田中', '佐藤', '鈴木']
ages = [25, 30, 18]
# zipでまとめてループ!
# name, age という2つの変数で同時に受け取る
for name, age in zip(names, ages):
print(f"{name}さんは {age} 歳です")
田中さんは 25 歳です
佐藤さんは 30 歳です
鈴木さんは 18 歳です
リストの長さが違ったらどうなる?
これが試験の頻出ポイント!
zip() は、「一番短いリスト」が終わった時点でループを終了するよ。
長い方の余ったデータは無視される(切り捨てられる)んだ。
list1 = [1, 2]
list2 = [10, 20, 30] # 30 は無視される!
for a, b in zip(list1, list2):
print(a, b)
# 結果:
# 1 10
# 2 20
3. reversed:逆再生ループ!
リストを後ろから順に処理したい時は、reversed() 関数を使うよ。
range() と同じで、メモリを無駄食いせずに逆順のデータを渡してくれるイテレータだよ。
🐍 サンプルコードを見る(クリックで開閉)
countdown = [1, 2, 3]
# reversed() で逆順ループ
for i in reversed(countdown):
print(i)
# 元のリストは変わらないよ!
print(f"元のリスト: {countdown}")
3
2
1
元のリスト: [1, 2, 3]
ちなみに、list.reverse() メソッドはリスト自体を書き換えちゃうけど、reversed(list) は元のリストを守ったまま逆順に取り出せるのが違いだよ。
試験に出る!要注意ポイント
今回の範囲で、Python 3 エンジニア認定基礎試験によく出るポイントをまとめたよ!📝
① zipの戻り値は「イテレータ」
zip() の結果を直接 print() しても、<zip object at ...> と表示されるだけで中身は見えないよ。
中身を見たいときは list(zip(a, b)) のようにリスト化する必要があるんだ。
これは range() や reversed() も同じ!「必要な時に1つずつ値を渡すケチなやつ(省エネなやつ)」って覚えてね。
② 辞書のループ(復習)
辞書をループする時の items() も、実は enumerate や zip と似た感覚で使えるよ。
for k, v in d.items(): は、キーと値を同時に取り出すテクニックだったね。
zip で長さの違うリストを結合した時、大事なデータが末尾にあって、それが勝手に切り捨てられてバグの原因になったことがあるよ😱もし「長さが違う時はエラーにしてほしい!」って場合は、
zip(..., strict=True) (Python 3.10以降) を使うと安全だよ!
理解度チェック!ミニクイズ
ループのテクニック、使いこなせそう?
試験レベルの問題でチェックしてみよう!🔍
次のコードの実行結果は?
colors = ['red', 'blue']
for i, c in enumerate(colors, 1):
print(i, c, end=' ')
▼ クリックで正解を表示
解説:
enumerate(..., 1) と指定しているから、インデックス(カウント)は 1 から始まるよ。
デフォルトは 0 からだから注意してね!
次のコードで result の中身はどうなる?
a = [1, 2, 3]
b = [10, 20]
result = list(zip(a, b))
▼ クリックで正解を表示
result の中身はどうなる?[(1, 10), (2, 20)]
解説:
zip() は「一番短いシーケンス」に合わせて終了するよ。
リスト a の 3 は相方がいないから切り捨てられるんだ。
リストを逆順にループ処理したい時に使う、元のリストを変更しない関数は?
▼ クリックで正解を表示
reversed(list)
解説:
1の reverse() は元のリストを書き換えてしまうよ。
3の [::-1] も逆順リストを作るけど、メモリ上にコピーを作成しちゃう。
ループで回すだけならイテレータを返す reversed() が一番効率的!
まとめ:次回への引き
今回は「ループの便利テクニック」について解説したよ!
enumerate と zip は、Pythonコードを「Pythonらしく(Pythonicに)」書くための第一歩。ぜひ使ってみてね✨
次回は、条件分岐の新しい形!
テーマは「比較演算子と条件の組み合わせ」だよ。
「a < b < c」みたいな数学的な書き方ができるPythonの凄さと、ブール演算子 and or の「短絡評価(ショートサーキット)」という重要な挙動について解説するからお楽しみに!👋✨
出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.






