【2026年9月最新】Pythonのfor文の使い方完全ガイド|基礎構文から応用テクニック、AIエージェントに書かせる時代の付き合い方まで
「Pythonのfor文って結局どう書けばいいの?」「rangeとenumerateの違いがよくわからない」——この記事にたどり着いたあなたは、おそらくそんな疑問を抱えているはずです。
for文はPythonでもっとも登場頻度が高い制御構文のひとつです。データの集計、ファイルの一括処理、条件に応じた仕分け——業務でPythonを使う場面のほとんどで、何らかの形で「繰り返し処理」が絡んできます。にもかかわらず、break/continue/elseの使い分けやenumerate・zip・内包表記まで正確に理解している人は意外と少ないのが実情です。
この記事では、for文の基本構文から応用テクニックまでを実例付きで整理します。さらに後半では、弊社(株式会社GENAI)がClaude Codeという AIエージェントを使って「for文を書く」という作業そのものをどう扱っているかという、2026年時点のもうひとつの現実的な選択肢も紹介します。
この記事を最後まで読むと、次の6つが明確になります。
01 BASIC SYNTAX for文の基本構文をゼロから理解する 「繰り返し処理」の考え方と最小限の書き方
for文は、リストや文字列などの「集まり」から要素を1つずつ取り出して、同じ処理を繰り返すための構文です。まずは最小限の形を見てみましょう。
fruits = ['りんご', 'みかん', 'ぶどう']
for fruit in fruits:
print(fruit)
# 出力:
# りんご
# みかん
# ぶどう
📚 用語解説
for文:リストやタプルなどの「集まり(イテラブル)」から要素を1つずつ順番に取り出し、同じ処理を繰り返すためのPythonの構文。「for 変数 in 集まり:」という形で書き、コロン以下のインデント(字下げ)された行が繰り返される処理になります。
ポイントは「fruit」という変数名が、繰り返しのたびに次の要素へ自動的に置き換わっていくことです。1回目のループでは「りんご」、2回目は「みかん」、3回目は「ぶどう」がfruitに入り、for文の中の処理(ここではprint)が3回実行されます。
Pythonでは「{ }」のような括弧ではなく、インデント(半角スペース4つが一般的)で「どこまでがfor文の中身か」を判定します。インデントがずれると即座にエラーになるか、意図しない場所までしかループに含まれなくなるため、エディタの自動インデント機能に頼るのが安全です。
1-1. 文字列・辞書もfor文でループできる
for文はリストだけでなく、文字列(1文字ずつ)や辞書(キーと値のペア)にも使えます。
# 文字列を1文字ずつ処理
for char in 'GENAI':
print(char)
# 辞書のキーと値を同時に取り出す
profile = {'name': '菅澤', 'role': 'CEO'}
for key, value in profile.items():
print(f'{key}: {value}')
📚 用語解説
イテラブル (iterable):for文で1つずつ要素を取り出せる対象の総称。リスト・タプル・文字列・辞書・range()の戻り値などが該当します。「繰り返し可能なもの」というニュアンスで、Pythonの公式ドキュメントでも頻出する用語です。
辞書をループする場合、.items()を付けないと「キーだけ」しか取り出せない点に注意が必要です。値も同時に使いたい場合は、必ず.items()を付けてfor key, value in ...という書き方をします。
02 RANGE FUNCTION range関数で「回数」を指定してループする 「10回繰り返したい」を実現する最も一般的な方法
リストの中身ではなく、「単純に10回繰り返したい」「1から100まで足し算したい」という場面では、range()関数を使います。
# 0から4まで(5回)繰り返す
for i in range(5):
print(i)
# 出力: 0 1 2 3 4
# 開始値と終了値を指定
for i in range(2, 6):
print(i)
# 出力: 2 3 4 5
# ステップ(増分)を指定
for i in range(0, 10, 2):
print(i)
# 出力: 0 2 4 6 8
📚 用語解説
range関数:連続した数値の並びを生成する関数。range(終了値)、range(開始値, 終了値)、range(開始値, 終了値, 増分)の3通りの書き方がある。終了値そのものは含まれない点が初学者がつまずきやすいポイントで、range(5)は「0,1,2,3,4」の5個で、5自体は含まれません。
range(1, 11)と書けば1〜10の10個が得られますが、うっかりrange(1, 10)と書いてしまい「1〜9までしか処理されない」というミスは非常によくあります。「1から10まで」と考えたら、range()の第2引数には本当に欲しい最後の数値+1を入れる、と覚えておくと事故を防げます。
2-1. インデックス番号を使ってリストを操作する
range()とlen()を組み合わせると、リストのインデックス番号(何番目か)を使ってループできます。要素の値だけでなく「順番」も同時に扱いたいときに便利です。
scores = [80, 65, 92]
for i in range(len(scores)):
print(f'{i+1}番目のスコア: {scores[i]}')
# 出力:
# 1番目のスコア: 80
# 2番目のスコア: 65
# 3番目のスコア: 92
この書き方は動きますが、Pythonの流儀としては後述するenumerate()を使う方が読みやすく推奨されます。ただし「インデックス番号を使って別のリストも同時に書き換えたい」場合などは、range(len(...))の方が素直に書けることもあります。
03 LOOP CONTROL break・continue・elseでループを制御する 「途中でやめる」「一部だけ飛ばす」を使い分ける
実務のコードでは、単純に最後まで繰り返すだけでなく、「条件を満たしたら途中でやめたい」「特定の条件だけスキップしたい」という制御が頻繁に必要になります。ここで使うのが break・continue・else の3つです。
3-1. break:処理を途中で完全に打ち切る
break は、ループ処理そのものを即座に終了させます。条件に合致した時点で、それ以降の繰り返しは一切実行されません。
numbers = [3, 7, 12, 5, 9]
for n in numbers:
if n > 10:
print(f'{n}は10を超えたので終了')
break
print(n)
# 出力:
# 3
# 7
# 12は10を超えたので終了
📚 用語解説
break文:for文やwhile文の実行中に呼ばれると、そのループを即座に終了させる文。「探していたデータが見つかったから、これ以上探索する必要がない」といった場面で使うことで、無駄な処理を省き実行速度を上げられます。
3-2. continue:その回だけスキップして次へ進む
continue は break と混同されがちですが、動作はまったく異なります。その回の処理だけを打ち切り、ループ自体は継続します。
numbers = [3, 7, 12, 5, 9]
for n in numbers:
if n > 10:
continue
print(n)
# 出力:
# 3
# 7
# 5
# 9
# (12だけスキップされ、ループは最後まで続く)
📚 用語解説
continue文:ループ処理の中で、その回の残りの処理をスキップして次の繰り返しに進む文。breakと違いループ自体は終了しない。「特定の条件のデータだけ除外して、残りは通常通り処理したい」という場面で使います。
「途中でやめたいのか」「その回だけ飛ばしたいのか」を意識せずに書くと、意図と正反対の結果になることがあります。迷ったときは「もう探さなくていい→break」「今回だけ無視したい→continue」と言葉にしてから書くと事故が減ります。
3-3. else:ループが最後まで完走したときだけ実行
for文には、実はif文と同じようにelse節を付けられます。あまり知られていませんが、「breakされずに最後まで実行された場合のみ」elseの中身が実行されるという特殊な仕様です。
targets = [1, 2, 3, 4, 5]
for n in targets:
if n == 99:
print('見つかりました')
break
else:
print('99は見つかりませんでした')
# 出力: 99は見つかりませんでした(breakされなかったのでelseが実行される)
📚 用語解説
for-else構文:for文の直後にelseを書くと、「ループがbreakされずに最後まで実行し終えたとき」だけelse内の処理が実行される。「探索して見つからなかった場合の処理」を書くのに便利ですが、知らないと存在に気づきにくい構文でもあります。
04 PRACTICAL TECHNIQUES enumerate・zip・スライスで実務的に書く 実際の業務データ処理でよく使う3つの武器
ここからは、実務のPythonコードで頻出するenumerate・zip・スライスを紹介します。この3つを使いこなせると、for文で書けるコードの幅が一気に広がります。
4-1. enumerate:値とインデックスを同時に取り出す
enumerate()を使うと、「何番目か」という情報(インデックス)と「値」を同時に取り出せます。先ほど紹介したrange(len(...))よりも簡潔で、Pythonらしい書き方とされています。
members = ['菅澤', '山崎', '佐藤']
for i, name in enumerate(members):
print(f'{i}: {name}')
# 出力:
# 0: 菅澤
# 1: 山崎
# 2: 佐藤
# 1から数えたい場合はstart引数を指定
for i, name in enumerate(members, start=1):
print(f'{i}番目: {name}')
📚 用語解説
enumerate関数:リストなどをループする際に、要素の値と一緒にインデックス番号(0から始まる連番)を同時に取得できる関数。「何番目のデータか」を表示したいときや、後で同じ位置の別リストを参照したいときに使います。
4-2. zip:複数のリストを同時にループする
zip()は、複数のリストを「同じ順番同士」でペアにして同時にループできる関数です。「名前のリスト」と「点数のリスト」のように、対応関係のある複数のデータを扱うときに重宝します。
names = ['菅澤', '山崎', '佐藤']
scores = [92, 88, 75]
for name, score in zip(names, scores):
print(f'{name}: {score}点')
# 出力:
# 菅澤: 92点
# 山崎: 88点
# 佐藤: 75点
📚 用語解説
zip関数:複数のリストを同じ順番同士でペアにして、まとめてループ処理できるようにする関数。リストの長さが揃っていない場合は、最も短いリストの長さに合わせて自動的に打ち切られる点に注意が必要です。
例えばnamesが5件、scoresが3件しかない場合、zip()は3件分しかペアを作りません。「データの件数が合っていないのに、なぜか一部しか処理されない」というバグの原因になりやすいため、事前にlen()で件数を確認する習慣をつけると安全です。
4-3. スライスで「一部の要素」だけをループ対象にする
リストの一部分だけを取り出すスライスを使えば、「最初の3件だけ」「後半5件だけ」といった限定的なループも簡単に書けます。
data = [10, 20, 30, 40, 50, 60]
# 最初の3件だけ
for n in data[:3]:
print(n)
# 後ろから2件だけ
for n in data[-2:]:
print(n)
# 逆順にループ
for n in data[::-1]:
print(n)
📚 用語解説
スライス:リストや文字列から「一部分」を取り出す記法。リスト[開始:終了]の形で書き、開始や終了を省略すると「最初から」「最後まで」を意味します。[::-1]は「全体を逆順に並べ替える」という頻出パターンです。
05 LIST COMPREHENSION リスト内包表記でスマートに書き換える for文を1行に圧縮する、Pythonらしい書き方
Pythonには、「新しいリストを作るためのfor文」を1行で書ける「リスト内包表記」という構文があります。慣れると非常に読みやすく、実務コードでも頻繁に登場します。
# 通常のfor文で「2乗のリスト」を作る場合
squares = []
for n in range(1, 6):
squares.append(n ** 2)
# squares = [1, 4, 9, 16, 25]
# リスト内包表記なら1行で書ける
squares = [n ** 2 for n in range(1, 6)]
# squares = [1, 4, 9, 16, 25]
📚 用語解説
リスト内包表記:[式 for 変数 in 集まり]という形で、新しいリストを作る処理を1行で書けるPython特有の構文。通常のfor文+append()を使った3〜4行のコードを、1行に集約できます。可読性とパフォーマンスの両面でPythonでは推奨される書き方です。
条件を付けたい場合は、末尾にif文を追加します。
# 偶数だけを2乗したリストを作る
squares_even = [n ** 2 for n in range(1, 11) if n % 2 == 0]
# squares_even = [4, 16, 36, 64, 100]
内包表記は便利ですが、条件やネストを詰め込みすぎると逆に読みにくくなります。目安として1行に収まらない複雑さになったら、通常のfor文に戻す方が、後で読む人(未来の自分を含む)にとって親切です。
5-1. 辞書内包表記・セット内包表記もある
リストだけでなく、辞書やセット(集合)を作る内包表記もあります。基本の考え方はリスト内包表記と同じです。
# 辞書内包表記:{キー: 値 for ...}
prices = {'りんご': 150, 'みかん': 80}
tax_included = {k: int(v * 1.1) for k, v in prices.items()}
# {'りんご': 165, 'みかん': 88}
06 NESTED LOOPS ネストしたfor文と処理速度の注意点 「ループの中にループ」を書くときに気をつけること
for文の中にさらにfor文を書く「ネスト(入れ子)」は、表形式のデータや2次元のリストを扱うときによく使われます。
grid = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in grid:
for cell in row:
print(cell, end=' ')
print() # 行の終わりで改行
# 出力:
# 1 2 3
# 4 5 6
# 7 8 9
📚 用語解説
ネスト(入れ子):ある構文の中に、同じ種類の構文をさらに含めること。for文の中にfor文を書く「二重ループ」は、Excelの表のような「行×列」のデータを扱うときに典型的に登場します。
注意したいのは処理速度です。外側のループが100回、内側のループも100回だとすると、処理全体は100 × 100 = 10,000回実行されます。データ件数が数百〜数千件規模になると、ネストの深さによっては処理時間が急激に伸びる点に注意が必要です。
実務では二重ループまでに抑えるのが目安です。それ以上のネストが必要に見える場合は、多くのケースで関数に分割するか、辞書を使って検索処理を高速化することで、ネストを減らしながら同じ結果を得られます。
ネストしたfor文がどう動いているかを図にすると、以下のような「外側が1周する間に、内側が全部回る」という関係になります。
1周目
row = [1,2,3]
が3周
1→2→3を処理
2周目へ
row = [4,5,6]
が再び3周
4→5→6を処理
6-1. 大量データを扱うときの現実的な選択肢
数百万件規模のデータをfor文でループ処理すると、非常に時間がかかることがあります。業務でそうした規模のデータを扱う場合は、for文をそのまま多重ループさせるのではなく、pandasのようなライブラリでベクトル演算に置き換える、あるいはそもそもコードの設計自体をAIエージェントに相談するといった選択肢も現実的です。次の章では、この「AIに任せる」という選択肢を具体的に掘り下げます。
07 AI-ASSISTED CODING 【独自】for文を「書く」から「AIに指示する」へ 非エンジニアがコードを書かずにループ処理を実現する方法
ここまでfor文の基礎と応用を一通り解説してきましたが、正直なところに触れます。2026年現在、経営者や非エンジニアの方が、ここまでの内容をすべて暗記して自力でコードを書く必要は薄れてきています。
理由は明確で、Claude CodeのようなAIコーディングエージェントに「やりたいこと」を日本語で伝えるだけで、breakやenumerate、内包表記を適切に使い分けたコードを、AIが自動で書いて実行までしてくれるようになったからです。
📚 用語解説
Claude Code:Anthropicが提供するAIコーディングエージェント。ターミナルやデスクトップアプリ上で「やりたいこと」を日本語で伝えると、ファイルの読み書き・コードの生成・実行までを自律的に行います。for文のような基礎構文の正確な書き方を暗記していなくても、業務で必要な自動化処理を実現できます。
とはいえ、「for文が何をしているか」を理解していることには依然として価値があります。AIが生成したコードが正しく動いているかを確認したり、「もっとこうしてほしい」と的確に指示を出したりするには、最低限の構文理解が役に立つからです。この記事の内容は、まさに「AIへの指示の解像度を上げるための土台」として使えます。
やりたいことを
日本語で伝える
(例: 顧客リストを
集計して)
AIがfor文や
内包表記を含む
コードを生成
AIがコードを
実行し、結果を
提示
結果を見て
「ここを変えて」と
追加で指示
7-1. どんな業務がfor文の自動化で楽になるか
for文が活躍する場面は、突き詰めると「同じ作業を大量のデータに対して繰り返す」業務すべてです。以下のような業務は、まさにfor文(の考え方)の自動化で工数が大きく削減できる典型例です。
弊社の実感では、これからの現場に必要なのは「Pythonのfor文を正確に書けるエンジニア」を採用することよりも、「業務の繰り返し作業を、AIエージェントに正確な日本語で指示できる人」を社内に増やすことです。この記事のようなfor文の基礎知識は、まさにその「正確な指示」を出すための土台になります。
08 GENAI CASE STUDY 【独自データ】GENAI社内のループ処理自動化事例 Claude Codeで「繰り返し作業」をどこまで自動化しているか
ここでは、弊社(株式会社GENAI)が実際にClaude Codeを使って、for文的な「繰り返し処理」をどのように業務に組み込んでいるかを、数値と事例ベースで公開します。
8-1. 弊社の契約プランと導入範囲
| 項目 | 内容 |
|---|---|
| 契約プラン | Claude Max 20x(月$200 / 約30,000円) |
| 利用開始 | 2025年後半〜 |
| 利用部署 | 経営・営業・広告・開発・経理・秘書業務・個人業務まで全社 |
| for文的な処理の主な用途 | 顧客リストの一括処理、請求書の自動生成、複数ファイルの一括加工 |
8-2. 繰り返し作業の自動化による削減時間(肌感ベース・2026年4月時点)
| 業務領域 | 主な用途(繰り返し処理) | 概算削減時間 |
|---|---|---|
| 営業 | 顧客リスト数百件から条件抽出・提案書の一括生成 | 週20時間 → 週2時間 |
| 広告運用 | 複数キャンペーンのレポートを繰り返し集計・分析 | 週10時間 → 週1時間 |
| 経理 | 大量の請求書・経費データを1件ずつチェック・仕訳 | 月40時間 → 月5時間 |
| ブログ記事 | 複数記事の内部リンク・数値の一括点検 | 1本8時間 → 1本1時間 |
| 秘書業務 | 複数の予定・タスクを繰り返し整理 | 日2時間 → 日15分 |
上記は弊社の肌感ベースの数値であり、業種・業態・担当者のスキルによって削減時間は変動します。あくまで「for文的な繰り返し処理をAIに任せるとどの程度まで使い倒せるか」の参考情報としてご覧ください。
例えば経理業務では、以前は経費レシートを1件ずつ目視でExcelに転記していましたが、現在はClaude Codeに「このフォルダ内の領収書画像を全部読み込んで、日付・金額・勘定科目を一覧化して」と指示するだけで、人間が書けば数十行のfor文に相当する処理を数分で終わらせています。
09 CONCLUSION まとめ ── for文を理解すると、AI指示の精度も上がる 基礎を押さえた上で、「書く」作業自体はAIに任せる選択肢を持つ
この記事では、Pythonのfor文の基本構文から、range・break・continue・else・enumerate・zip・スライス・内包表記・ネストまでの応用テクニック、そしてAIエージェントにコードを書かせるという現実的な選択肢までを整理しました。最後にポイントを振り返ります。
最も重要なメッセージをお伝えします。for文の理解は「自分でコードを書くため」だけでなく、「AIに正確な指示を出すため」の土台としても価値があります。構文の意味がわかっていれば、AIが生成したコードの妥当性を判断でき、修正の指示も的確に出せるようになります。
弊社では、Claude Codeを使った業務自動化の設計から伴走まで支援する「AI鬼管理」というサービスを提供しています。for文的な繰り返し作業に限らず、社内のあらゆる「同じ作業の繰り返し」を、どこまでAIに任せられるか。気になる方は、ぜひ以下からお気軽にご相談ください。
繰り返し作業の自動化、AI鬼管理が一緒に設計します
for文を自分で書くか、AIに任せるか。
あなたの会社の「繰り返し業務」を棚卸しして、最適な自動化の形を一緒に考えます。
ここから先の進め方は、大きく2つあります。
自社で回せるようになりたい方は、AI鬼管理でClaude Code/Codexの使い方から業務設計・社内定着まで伴走を受けながら、社内に仕組みを作る道があります。
覚えるより任せたい方は、AI社員AIKATAでこの記事のような定型業務を丸ごと預ける道があります。料金は月30万円の月額定額、追加費用は0円です。
どちらが合うかは、業務量と社内体制次第です。無料相談・無料適合診断で、貴社の場合はどちらが向くかからご相談いただけます。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
よくある質問
Q. for文とwhile文はどう使い分ければいいですか?
A. 「繰り返す回数や対象が決まっている」場合はfor文、「条件を満たす間はずっと繰り返したい(回数が不明)」場合はwhile文が向いています。リストの全件処理はfor文、「ユーザーが終了と入力するまで」のような処理はwhile文が典型例です。
Q. range(5)とrange(1, 5)の違いは何ですか?
A. range(5)は0,1,2,3,4の5個の数値を生成します。range(1, 5)は1,2,3,4の4個です。range()は第1引数を省略すると自動的に0から始まり、第2引数(終了値)は含まれない点が共通のルールです。
Q. for文の中でリストの要素を削除しても大丈夫ですか?
A. 基本的には避けるべきです。ループ中に元のリストを直接変更すると、要素の位置がずれて意図しない要素がスキップされたりエラーになったりします。削除したい場合は、リスト内包表記で「削除したい要素を除いた新しいリスト」を作る方法が安全です。
Q. enumerate()とzip()は同時に使えますか?
A. はい、組み合わせ可能です。例えばfor i, (name, score) in enumerate(zip(names, scores)):のように書けば、インデックス番号とペアになった値を同時に扱えます。ただしコードがやや複雑になるため、必要な場合のみ使うのがおすすめです。
Q. for文が遅いと感じたときの対処法はありますか?
A. 大量データの場合、リスト内包表記に書き換えるだけでも速度が改善するケースがあります。それでも遅い場合は、pandasやNumPyといった大量データ処理に特化したライブラリへの置き換えを検討します。判断に迷う場合はClaude Codeのようなツールに「このコードを高速化して」と相談するのも実践的な方法です。
Q. プログラミング未経験でもClaude Codeでfor文相当の処理は実現できますか?
A. 実現できます。Claude Codeは「このExcelの各行を確認して、条件に合うものだけ別シートに転記して」といった日本語の指示から、必要なfor文相当の処理を含むコードを自動で生成・実行します。この記事の基礎知識があれば、生成結果の妥当性もより正確に判断できます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
AI鬼管理/AI社員AIKATAへのお問い合わせ
この記事を読んで気になった方へ。
専門スタッフが、御社に最適な
業務自動化・業務代行プランを無料でご提案します。




