Python | 文法の基本:for ループ

Python
スポンサーリンク

for ループの概要(反復処理の基本)

for ループは「並び(イテラブル)の要素を先頭からひとつずつ取り出して処理する」ための構文です。リスト、タプル、文字列、辞書、集合、range() などに対して使えます。Pythonの for は「カウンタを自分で増やす」スタイルではなく「要素そのものを受け取る」ため、読みやすくミスが少ないのが特徴です。


基本構文とイテラブル(ここが重要)

基本の書き方

コロン「:」でブロック開始、次の行からインデントして処理を書きます。

fruits = ["apple", "banana", "orange"]
for fruit in fruits:
    print(fruit)
Python

文字列も1文字ずつ処理できます。

for ch in "Python":
    print(ch)
Python

range() で回数を指定

range(n) は 0 から n-1 までの連番を作ります。開始・終了・ステップも指定可能です。

for i in range(5):        # 0,1,2,3,4
    print(i)

for i in range(1, 10, 2): # 1,3,5,7,9
    print(i)
Python

「終了は含まれない」ことがポイントです。オフバイワン(±1のズレ)を避けるため、意図する範囲を明確にしましょう。


実用的な取り回し(辞書・集合・インデックス)

辞書のループ

キー、値、ペアで回す方法を使い分けます。

user = {"name": "花子", "age": 25}

for k in user:            # キー
    print(k)

for v in user.values():   # 値
    print(v)

for k, v in user.items(): # キーと値
    print(k, v)
Python

インデックスが必要なときは enumerate()

手でカウンタを管理するより、enumerate() を使うと安全で読みやすいです。

scores = [70, 85, 90]
for idx, s in enumerate(scores, start=1):
    print(f"{idx}番目: {s}")
Python

複数の並びを同時に回す zip()

長さを合わせて、同じ位置の要素をペアで受け取ります。

names = ["太郎", "花子"]
points = [92, 88]
for name, point in zip(names, points):
    print(name, point)
Python

制御構文との組み合わせ(break / continue / else)

break で途中終了

条件を満たしたらループを抜けます。

for n in [10, 20, 30, 40]:
    if n == 30:
        print("見つかった")
        break
Python

continue でスキップ

該当要素だけ処理を飛ばして次へ。

for s in ["ok", "", "done"]:
    if not s:
        continue
    print("処理:", s)
Python

for-else の使いどころ(深掘り)

ループが break せず「最後まで正常に終わった」ときだけ else が実行されます。探索の成否を簡潔に書けます。

target = "hanako"
names = ["taro", "jiro"]
for name in names:
    if name == target:
        print("見つかった")
        break
else:
    print("見つからなかった")  # breakが無かったときだけ
Python

例題で身につける(定番パターン)

例題1:合計・平均の計算

prices = [120, 340, 560]
total = 0
for p in prices:
    total += p
avg = total / len(prices)
print(f"合計: {total} / 平均: {avg:.1f}")
Python

例題2:フィルタと変換(条件付き処理)

data = ["120", "abc", "340", " 560 "]
clean = []
for s in data:
    s = s.strip()
    if not s.isdigit():
        continue
    clean.append(int(s))
print(clean)  # [120, 340, 560]
Python

例題3:二重ループでテーブル生成

for i in range(1, 4):
    for j in range(1, 4):
        print(f"{i}×{j}={i*j}")
Python

例題4:辞書の集計

orders = [
    {"item": "apple", "price": 120, "qty": 3},
    {"item": "banana", "price": 90, "qty": 5},
]
total = 0
for o in orders:
    total += o["price"] * o["qty"]
print(f"合計: {total} 円")
Python

重要ポイントの深掘り(落とし穴とベストプラクティス)

ミュータブルを回しながら変更するときの注意

ループ対象をその場で変更すると、意図しないスキップや重複が起きます。必要なら「コピーを回す」か「新しいリストへ結果を書き出す」方式にします。

items = [1, 2, 3, 4]
for x in items[:]:    # コピーで回す
    if x % 2 == 0:
        items.remove(x)
print(items)  # [1, 3]
Python

手動カウンタより enumerate

手で i += 1 するより enumerate が安全です。インデックスの開始値も指定できます。

range の終端は含まれない

range(a, b) は a から b-1 まで。境界値テストでズレを発見しやすくなります。

可読性を優先する

  • 複雑な条件は事前に変数へ分解してから if に使う。
  • 長い処理は関数化し、for の中では「要素→関数呼び出し」の形にする。
def score_label(s):
    return "Good" if s >= 80 else "Try"

for s in [70, 85, 90]:
    print(score_label(s))
Python

まとめ

for ループは「並びの要素を順に処理する」ための核で、Pythonでは要素そのものを扱うため読みやすく安全です。range の半開区間、enumerate・zip の活用、break/continue/for-else の制御を押さえると、ほとんどの反復処理が過不足なく書けます。変更しながら回す場合の副作用に注意し、可読性を最優先に構造化する習慣をつければ、現場で通用するループが自然に書けるようになります。

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