リスト項目を処理するための Python for ループ

Python の for ループは反復可能内の各項目をステップ実行するため、python for loop 検索は通常、「項目ごとにこの作業を繰り返す」ことを意味します。 リストまたはシーケンス内のすべての項目に同じルールを適用し、合計、フラグ、またはきれいな要約リストなどの結果を途中で収集する必要がある場合に使用します。 手動でインデックスを作成しなくても、繰り返し行われた作業を読みやすい状態に保ちます。

項目を反復するための Python For ループの例

出力:

ここに出力が表示されます...

出力:

Done: ship order
Done: email customer

この例の仕組み

ループは一度に 1 つの項目を実行するため、同じルールを一貫して適用できます。

  1. for task in tasks はリストから各文字列を取得します。
  2. すべての項目に対して同じ印刷アクションが実行されます。
  3. 出力は、ループがタスクごとに 1 回実行されたことを証明します。

よくある間違い

間違い 1: range に終了値が含まれると期待しています。

# Wrong: expects 1 through 5
for day in range(1, 5):
    print(day)
# Right: range stops before the end value
for day in range(1, 6):
    print(day)

これは、range が終了排他的であるため、ストップ値が生成されないために発生します。 詳細については、Python 範囲の例 を参照してください。

間違い 2: リストを反復中に変更する。

# Wrong: removing items shifts the list and can skip users
for user in users:
    if user["inactive"]:
        users.remove(user)
# Right: build a new list instead
active_users = []
for user in users:
    if not user["inactive"]:
        active_users.append(user)

項目を削除すると、ループの実行中にリストが変更されるため、一部の要素はアクセスされません。

間違い 3: for ... else の読み間違い。

# Wrong: expects else to run after a break
for item in items:
    if item["id"] == target_id:
        break
else:
    print("Item not found")
# Right: else runs only when the loop finishes without break
for item in items:
    if item["id"] == target_id:
        print("Item found")
        break
else:
    print("Item not found")

else ブロックはループが正常に完了した場合にのみ実行されるため、break はそれをスキップします。

for ループと while: どちらを使用するか

次の場合には for を使用してください…次の場合には while を使用してください…
処理するリスト、範囲、ファイル、または任意の反復可能オブジェクトがあります。条件が変更されるのを待っています (再試行、ポーリング、ユーザー入力)。
反復回数はデータによって決まります。反復回数は事前には不明です。
項目に対するクリーンな反復が必要です。いつ停止するかを手動で制御する必要があります。

経験則: 「アイテムごと」の作業には for を使用し、「この条件になるまで」の作業には while を使用します。

パフォーマンスに関する考慮事項

for ループは、指定した項目に対して O(n) 回実行されます。 range() は遅延型であるため、大きな数値範囲を反復してもメモリ内に巨大なリストが割り当てられることはありません。最初の一致のみが必要な場合は、早めに中断するか、next/any とジェネレーターを使用してスキャンを短絡し、不必要な作業を避けます。

ループ パターンのその他の Python

enumerate を使用して位置ラベルを追加します。

tasks = ["ship order", "email customer", "update CRM"]
for index, task in enumerate(tasks, start=1):
    print(f"{index}. {task}")

手動カウンターを使用せずに、アイテムとその位置の両方が必要な場合は、enumerate を使用します。 関連: Python 列挙の例

.items() を使用して辞書の値を要約します。

region_sales = {"west": 1200, "central": 950, "east": 1420}
for region, total in region_sales.items():
    print(f"{region}: ${total}")

.items() をループすると、キーと値がまとめて保持されるため、レポートに最適です。 キー/値の検索については、Python dict example を参照してください。

Python for ループを使用する場合

  • すべての注文、ユーザー、またはファイル行に同じルールを適用する必要があります。
  • 手動のインデックス管理を行わずに、アイテムを明確で読みやすいものにしたい。
  • 反復中に結果 (合計、問題のリスト) を収集する必要があります。
  • 単一の一致のみが必要な場合は避けてください。代わりに、nextany、または all を使用してショートしてください。