Python for文の書き方と使い方を徹底解説!繰り返し処理の基本から応用まで

Pythonを学び始めると、必ず最初に出会うのが「for文」です。繰り返し処理を自在に扱えるようになると、コードは一気に効率的になり、単純な作業を自動化できるようになります。
しかし、構文の書き方や便利な使い方を理解しきれず、つまずいてしまう人も少なくありません。この記事では、基本から応用までを丁寧に解説し、実践的に活用できる知識をお届けします。
Python for文とは?

Pythonのfor文は、繰り返し処理するための制御構文の一つです。プログラミングにおいて「同じような処理を何度も実行したい」という場面は非常に多く、for文はそんなときに役立ちます。
例えば100人分の成績データを処理したり、ファイル内のすべての行を読み込んだり、といった作業を手動でするのは現実的ではありません。そんなときfor文を使えば、このような反復作業を自動化できるのです。
for文の基本的な構文
Pythonのfor文は、次のような形で記述します。
for 変数名 in イテラブルオブジェクト:
実行したい処理
ここでポイントとなるのは、コロン(:)の後に改行し、実行したい処理をインデント(字下げ)することです。Pythonでは、このインデントによってどこからどこまでがfor文の処理範囲なのかを判断しています。
実際の例を見てみましょう。
fruits = ['りんご', 'バナナ', 'オレンジ']
for fruit in fruits:
print(f'今日は{fruit}を食べました')
実行結果:
今日はりんごを食べました
今日はバナナを食べました
今日はオレンジを食べました
この例では、fruitsリストの各要素が順番にfruit変数に代入され、print文が3回実行されます。
イテラブルなオブジェクトとは?(リスト、タプル、文字列など)
イテラブル(反復可能)とは、「順番に要素を取り出せる」という性質を持つデータ型のことを指します。主なイテラブルオブジェクトには以下があります。
リスト:角括弧[]で囲まれた要素の集合
numbers = [1, 2, 3, 4, 5]
タプル:丸括弧()で囲まれた変更不可能な要素の集合
colors = ('赤', '青', '緑')
文字列:文字の連続として扱われる
message = "Hello"
辞書:キーと値のペアを持つデータ構造
student = {'名前': '田中', '年齢': 20}
これらすべてがfor文で処理できるため、様々なデータ形式に対応した柔軟なプログラムを作成できます。
「なんか今の仕事合わないな・・・」
「IT業界に転職してみたいなぁ・・・」
という方、DMMが運営する「WEBCAMP エンジニア転職」をご検討してみてはいかがですか?

「WEBCAMP エンジニア転職」では最短12週間でITエンジニアを目指すことが可能です!
WEBCAMPの卒業生は転職後に年収もUP!(例:年収250万円→500万円)
しかも今なら受講料の最大70%が給付金として支給されます。
DMM WEBCAMPは経済産業省・厚生労働省が認定した専門実践教育訓練給付金制度の対象です
for文の基本的な使い方

for文の基本概念を理解したところで、実際にどのように使うのか具体例を通して見ていきましょう。
リストの要素を順番に取り出す
最も基本的な使い方として、リストの各要素に対して何らかの処理をする方法があります。
shopping_list = ['牛乳', 'パン', '卵', 'りんご']
for item in shopping_list:
print(f'買い物リスト: {item}')
実行結果:
買い物リスト: 牛乳
買い物リスト: パン
買い物リスト: 卵
買い物リスト: りんご
リストの要素が順番に表示されました。変数名itemは任意に決められるので、より意味のある名前を付けることで、コードの可読性が向上します。
ちなみに、数値のリストを扱う場合も同様です。
scores = [85, 92, 78, 95, 88]
total = 0
for score in scores:
total += score
print(f'合計点: {total}')
print(f'平均点: {total / len(scores)}')
実行結果:
合計点: 438
平均点: 87.6
文字列の文字を1つずつ取り出す
文字列もイテラブルオブジェクトなので、for文で1文字ずつ処理できます。
word = "Python"
for char in word:
print(f'文字: {char}')
実行結果:
文字: P
文字: y
文字: t
文字: h
文字: o
文字: n
この機能は、文字列の解析や特定の文字をカウントする際に便利です。
text = "Hello World"
vowel_count = 0
for char in text.lower():
if char in 'aiueo':
vowel_count += 1
print(f'母音の数: {vowel_count}')
実行結果:
母音の数: 3
for文とrange()関数を使った繰り返し処理
range()関数は、連続する整数を生成するPythonの組み込み関数です。for文と組み合わせることで、指定した回数だけ処理を繰り返せます。
h4 指定した回数だけ繰り返す
range(5)は0から4までの数値を生成するため、ループは5回実行されます。
for i in range(5):
print(f'{i + 1}回目の処理です')
実行結果:
1回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です
注意点として、Pythonでは0から数え始めることを覚えておきましょう。
h4 開始位置と終了位置を指定する
range()関数には開始値と終了値を指定できます。
for num in range(3, 8):
print(f'数値: {num}')
実行結果:
数値: 3
数値: 4
数値: 5
数値: 6
数値: 7
この例では3から7まで(8は含まれません)の数値が順番に処理されます。
h4 ステップ(増分)を指定する
第3引数にステップ値を指定することで、増分を変更できます。
# 偶数のみ表示
for even in range(2, 11, 2):
print(f'偶数: {even}')
# 逆順で表示
for countdown in range(10, 0, -1):
print(f'カウントダウン: {countdown}')
実行結果:
偶数: 2
偶数: 4
偶数: 6
偶数: 8
偶数: 10
カウントダウン: 10
カウントダウン: 9
カウントダウン: 8
カウントダウン: 7
カウントダウン: 6
カウントダウン: 5
カウントダウン: 4
カウントダウン: 3
カウントダウン: 2
カウントダウン: 1
for文をより便利に使う応用テクニック

基本的な使い方をマスターしたら、より効率的で実践的なテクニックを学んでいきましょう。
enumerate()関数を使ってインデックスと要素を同時に取得する
リストを処理する際、要素だけでなくその位置(インデックス)も知りたい場合があります。enumerate()関数を使えば、両方の情報を同時に取得できます。
fruits = ['りんご', 'バナナ', 'オレンジ', 'ぶどう']
for index, fruit in enumerate(fruits):
print(f'{index + 1}番目: {fruit}')
実行結果:
1番目: りんご
2番目: バナナ
3番目: オレンジ
4番目: ぶどう
enumerate()であれば、開始値も指定できます。
for index, fruit in enumerate(fruits, start=1):
print(f'{index}番目: {fruit}')
実行結果:
1番目: りんご
2番目: バナナ
3番目: オレンジ
4番目: ぶどう
この機能は、主に順位付けやデータの位置を特定する処理で重宝します。
zip()関数を使って複数のリストを同時に処理する
複数のリストを並行して処理したい場合、zip()関数が便利です。
names = ['田中', '佐藤', '鈴木']
ages = [25, 30, 22]
cities = ['東京', '大阪', '名古屋']
for name, age, city in zip(names, ages, cities):
print(f'{name}さん({age}歳)は{city}在住です')
実行結果:
田中さん(25歳)は東京在住です
佐藤さん(30歳)は大阪在住です
鈴木さん(22歳)は名古屋在住です
zip()関数は、最も短いリストの長さに合わせて処理します。データの対応関係を保ちながら処理できるため、関連する情報を扱う際に非常に有用です。
for文とif文の組み合わせ
for文内でif文を使用することで、条件に応じた処理が可能になります。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = []
odd_numbers = []
for num in numbers:
if num % 2 == 0:
even_numbers.append(num)
else:
odd_numbers.append(num)
print(f'偶数: {even_numbers}')
print(f'奇数: {odd_numbers}')
実行結果:
偶数: [2, 4, 6, 8, 10]
奇数: [1, 3, 5, 7, 9]
numbers リストには 1~10 の整数が格納されており、for num in numbers: で順番に1つずつ取り出します。そして、if num % 2 == 0: で2で割った余りが0かどうかをチェックし、余りが0なら「偶数」なので even_numbers.append(num) に追加します。
そうでなければ「奇数」なので odd_numbers.append(num) に追加、というロジックです。ループが終わったあと、偶数と奇数がそれぞれのリストにきれいに分けられて表示されます。
リスト内包表記(for文を1行で書く)
Pythonには、for文を使った処理を1行で記述できる「リスト内包表記」という機能があります。
# 通常のfor文
squares = []
for i in range(1, 6):
squares.append(i ** 2)
# リスト内包表記
squares = [i ** 2 for i in range(1, 6)]
また、条件付きの処理も可能です。
# 偶数の平方のみを取得
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
実行結果:(どちらも同じ)
[1, 4, 9, 16, 25]
リスト内包表記は短く書ける分、可読性が上がる場面も多いです。ただし複雑な条件分岐を入れすぎると逆に読みづらくなるので、使いどころを意識すると良いでしょう。
for文の制御文:breakとcontinue

ループ処理の中で、特定の条件下でループを終了したり、次の繰り返しに進んだりしたい場合があります。そんなときに使うのがbreakとcontinue文です。
break文でループを途中で終了する
break文を使うと、条件を満たした時点でfor文を強制終了できます。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 5
for num in numbers:
if num == target:
print(f'{target}を見つけました!')
break
print(f'現在の数値: {num}')
実行結果:
現在の数値: 1
現在の数値: 2
現在の数値: 3
現在の数値: 4
5を見つけました!
この例では、5が見つかった時点でループが終了します。大量のデータから特定の値を探す際に、無駄な処理を避けられるため効率的です。
continue文でループの次の処理に進む
continue文は、現在の繰り返し処理をスキップして次の要素に進みます。
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
if num % 2 == 1: # 奇数の場合
continue
print(f'偶数: {num}')
実行結果:
偶数: 2
偶数: 4
偶数: 6
偶数: 8
偶数: 10
この例では奇数をスキップし、偶数のみが表示されます。特定の条件に該当しないデータを除外したい場合に便利です。
for文とwhile文の違い

Pythonには繰り返し処理をする文として、for文以外にwhile文もあります。
一般的に、
- 繰り返し回数が明確な場合はfor文
- 条件による制御が必要な場合はwhile文
を選択します。両者の使い分けについて、それぞれ理解しておきましょう。
for文を使うべきケース
for文は以下のような場面で適しています。
- 回数が決まっている繰り返し。「10回処理する」「リストの全要素を処理する」など
- イテラブルオブジェクトの処理。リスト、タプル、文字列などの全要素を扱う。
- カウンタ変数が必要なとき。連番を生成しながら処理したいときなど。
# 明確に5回繰り返す
for i in range(5):
print(f'{i + 1}回目')
# リストの全要素を処理
students = ['田中', '佐藤', '鈴木']
for student in students:
print(f'{student}さん')
実行結果:
1回目
2回目
3回目
4回目
5回目
田中さん
佐藤さん
鈴木さん
一般的に、繰り返し回数が明確な場合はfor文、条件による制御が必要な場合はwhile文を選択します。
while文を使うべきケース
while文は条件が満たされている間、繰り返し処理を続けます。
# 合計が100を超えるまで繰り返す
total = 0
count = 1
while total < 100:
total += count
count += 1
print(f'合計: {total}')
print(f'最後に加算した数: {count - 1}')
実行結果:
合計: 105
最後に加算した数: 14
よくある質問とエラー解決

for文を使っていると、よく遭遇する問題や疑問について解説します。
for文の多重ループ(ネスト)の書き方
for文の中に別のfor文を書くことを「ネスト(入れ子)」といいます。たとえば二次元のデータを処理する際によく使われます。
# 九九の表を作成(一部のみ表示)
for i in range(1, 4):
for j in range(1, 4):
result = i * j
print(f'{i} × {j} = {result}')
print('---') # 区切り線
実行結果:
1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
---
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
---
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
---
また、リストのリストを処理する場合は、以下のようになります。
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for row in matrix:
for element in row:
print(element, end=' ')
print() # 改行
実行結果:
1 2 3
4 5 6
7 8 9
繰り返し処理の速度を上げるには?
大量のデータを処理する際は、処理速度が重要になります。最適化の方法はいくつかあるので、紹介します。
リスト内包表記を活用する場合は以下です。
import time
# 遅い方法
start_time = time.time()
result1 = []
for i in range(10000):
result1.append(i * 2)
end_time = time.time()
print(f'通常のfor文: {end_time - start_time:.4f}秒')
# 速い方法
start_time = time.time()
result2 = [i * 2 for i in range(10000)]
end_time = time.time()
print(f'リスト内包表記: {end_time - start_time:.4f}秒')
実行結果:
通常のfor文: 0.0031秒
リスト内包表記: 0.0015秒
不要な計算を避ける方法としては、以下です。
# 遅い方法(毎回len()を計算)
items = [1, 2, 3, 4, 5]
print('遅い方法:')
for i in range(len(items)):
print(items[i])
print('\n速い方法:')
# 速い方法
for item in items:
print(item)
実行結果:(どちらも同じ)
1
2
3
4
5
TypeError: ‘int’ object is not iterableエラーの対処法
こちらのエラーは、主にイテラブルでないオブジェクト(主に整数)をfor文で使おうとした際に発生します。
# エラーが発生するよくない例
# number = 5
# for i in number: # TypeError: 'int' object is not iterable
# print(i)
# 正しい書き方
number = 5
for i in range(number):
print(i)
実行結果:
0
1
2
3
4
また、range()関数の使い方を間違えた場合もこのエラーが起きます。
# エラーが発生するよくない例
# for i in range(5, 1): # 何も出力されない
# print(i)
# 正しい書き方(逆順の場合)
for i in range(5, 1, -1):
print(i)
実行結果:
5
4
3
2
プログラミングを学ぶならDMM WEBCAMP

プログラミングスキルをより体系的に学びたい方、実践的なスキルを身に付けて転職や副業に活かしたい方は、専門的な学習環境を利用することをおすすめします。独学もひとつの選択肢ですが、限界を感じたり、効率的な学習方法が分からなかったりする場合も多いでしょう。
そんな方には、実践的なカリキュラムと充実したサポート体制が整った、DMM WEBCAMPの「はじめてのプログラミングコース」がおすすめです。現役エンジニアからの直接指導を受けられたり、実際の開発現場で使われている技術を学べたりする環境が整っており、まったくPCすら触ったことがない方でも確実にスキルアップを図れます。
また単なる学習だけでなく、その後のキャリア形成についても相談できる環境があるため、エンジニアとして転職するにも、副業やフリーランス独立を目指すにしても、自分に合った進路を現役のキャリアアドバイザーと一緒に描いていけます。さらにこちらのコースはリスキリングの対象講座となっているため、受講料最大70%オフが適応されるなど、お財布にも優しい価格設定です。
プログラミングに興味があったり、キャリアの再構築をお考えの方は、この機会にぜひご検討ください。
まとめ
Pythonのfor文は、プログラミングにおける基本的であり、どの現場でもほぼ必ず使われます。基本的な構文をしっかりと理解し、enumerate()やzip()などの便利な関数と組み合わせることで、より効率的で読みやすいコードが書けるようになるでしょう。
最初は複雑に感じるかもしれませんが、実際に手を動かして様々なパターンを試すことで、自然に身に付いていきます。for文をマスターして、Pythonプログラミングの幅を大きく広げていきましょう。
まったくの未経験からPythonを学ぶなら、DMM WEBCAMPの「はじめてのプログラミングコース」もぜひご検討ください。基礎から段階的に学べるカリキュラムと、現役エンジニアによる手厚いサポートが整っています。