Python for文の基礎|繰り返し処理を簡単に理解する
Python for文の基本的な使い方を初心者向けに解説。リスト、range関数、辞書の繰り返し処理から実践的な活用方法まで、コード例とともに詳しく紹介します。
Python for文の基礎|繰り返し処理を簡単に理解する
プログラミングで同じ処理を何度も書いて疲れたことはありませんか?
みなさん、プログラムを書いているとき、こんな場面に出会ったことはありませんか?
「リストの中身を1つずつ処理したい」 「同じ計算を何回も繰り返したい」 「for文って何?どうやって使うの?」
実は、これらの問題を解決してくれるのがfor文という便利な機能なんです。
この記事では、Python初心者でも簡単にマスターできるよう、for文の基本から実践的な使い方まで、丁寧に解説していきます。 繰り返し処理をマスターすることで、もっと効率的なプログラムが書けるようになりますよ!
for文って何だろう?まずは基本から理解しよう
for文は、同じ処理を何度も繰り返すための仕組みです。
簡単に言うと、「リストの要素を1つずつ取り出して処理する」や「決まった回数だけ同じことを実行する」といったことができます。
for文の基本的な書き方
Pythonのfor文は、とてもシンプルな構文で書けます。
for 変数名 in 繰り返したいもの: 実行したい処理
まず、簡単な例を見てみましょう。
# 果物のリストを1つずつ表示fruits = ["りんご", "バナナ", "オレンジ"]for fruit in fruits: print(fruit)
このコードでは、fruits
リストの中身を1つずつfruit
という変数に入れて、print()
で表示しています。
実行すると、「りんご」「バナナ」「オレンジ」が順番に表示されます。
なぜfor文が重要なの?
for文を使わないと、同じ処理を何度も書く必要があります。
# for文を使わない場合(非効率)fruits = ["りんご", "バナナ", "オレンジ"]print(fruits[0])print(fruits[1])print(fruits[2])
# for文を使う場合(効率的)for fruit in fruits: print(fruit)
どちらも同じ結果ですが、for文を使う方が圧倒的に簡潔ですよね。
要素が100個あっても、for文なら3行で済むんです!
リストの繰り返し処理をマスターしよう
リストの要素を1つずつ処理するのは、for文の最も基本的な使い方です。
色々なパターンを見てみましょう。
基本的なリスト処理
# 数値のリストを処理numbers = [1, 2, 3, 4, 5]for num in numbers: print(f"数字: {num}")
# 文字列のリストを処理colors = ["赤", "青", "緑", "黄色"]for color in colors: print(f"色: {color}")
このコードでは、2つの異なるリストを処理しています。
最初の例では数値を、次の例では文字列を1つずつ取り出して表示しています。
f""
という記法を使うと、変数の値を文字列の中に簡単に埋め込めて便利です。
リストの要素で計算をしてみよう
# リストの数値を全部足すnumbers = [10, 20, 30, 40, 50]total = 0for num in numbers: total = total + num # total += num と同じprint(f"合計: {total}")
# 各要素を2倍にして新しいリストを作るoriginal = [1, 2, 3, 4, 5]doubled = []for num in original: doubled.append(num * 2)print(f"元のリスト: {original}")print(f"2倍のリスト: {doubled}")
最初の例では、リストの全ての数値を足し合わせています。
total
という変数に少しずつ数値を足していく方法です。
2番目の例では、各要素を2倍にして新しいリストを作成しています。
条件を使って選択的に処理する
# 偶数だけを表示numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]for num in numbers: if num % 2 == 0: # 2で割り切れる(偶数) print(f"偶数: {num}")
# 長い名前だけを表示names = ["田中", "佐藤", "山田太郎", "鈴木一郎"]for name in names: if len(name) > 2: # 名前が3文字以上 print(f"長い名前: {name}")
for文とif文を組み合わせることで、条件に合う要素だけを処理できます。
%
は割り算の余りを求める演算子で、num % 2 == 0
は「2で割った余りが0」つまり偶数を意味します。
len()
関数は文字列の長さを調べる関数です。
range関数で決まった回数だけ繰り返そう
「リストの要素ではなく、決まった回数だけ処理を繰り返したい」というときは、range()
関数を使います。
range関数の基本的な使い方
# 5回繰り返しfor i in range(5): print(f"これは{i + 1}回目です")
# 実行結果:# これは1回目です# これは2回目です# これは3回目です# これは4回目です# これは5回目です
range(5)
は0から4までの数値(計5個)を生成します。
プログラミングでは0から数え始めるのが一般的なので、i + 1
で表示を1から始めています。
range関数のいろいろな使い方
# 基本形: range(終了値) - 0から始まるfor i in range(3): print(i) # 0, 1, 2
print("---")
# 開始値と終了値を指定: range(開始値, 終了値)for i in range(2, 6): print(i) # 2, 3, 4, 5
print("---")
# ステップを指定: range(開始値, 終了値, ステップ)for i in range(0, 10, 2): print(i) # 0, 2, 4, 6, 8
rangeは「範囲」という意味で、数値の範囲を指定して繰り返し処理を行います。
終了値は含まれないことに注意しましょう(range(5)
は4まで)。
ステップを指定すると、指定した間隔で数値を生成できます。
range関数の実践的な使い方
# 九九の表を作るprint("九九の表:")for i in range(1, 10): for j in range(1, 10): result = i * j print(f"{i} × {j} = {result:2d}", end=" ") print() # 行の終わりで改行
# カウントダウンを作るprint("カウントダウン:")for i in range(5, 0, -1): # 5から1まで逆順 print(f"{i}...")print("発射!")
九九の表では、for文を2つ重ねて使っています(これを「入れ子」または「ネスト」と呼びます)。
カウントダウンでは、ステップに-1
を指定して逆順に数えています。
end=" "
は改行せずに空白で区切るためのオプションです。
辞書の繰り返し処理をやってみよう
辞書(dictionary)は、キーと値のペアでデータを管理する便利な仕組みです。
辞書でもfor文を使って繰り返し処理ができます。
辞書のキーを繰り返し処理する
# 学生の成績を管理する辞書student_scores = { "田中": 85, "佐藤": 92, "鈴木": 78, "高橋": 95}
# 名前(キー)だけを表示print("クラスの生徒一覧:")for name in student_scores: print(f"- {name}")
辞書をfor文で処理すると、デフォルトでキー(この場合は生徒の名前)が取得されます。
これで、辞書に登録されている全ての生徒名を簡単に表示できます。
辞書の値だけを処理する
# 点数(値)だけを処理print("全生徒の点数:")for score in student_scores.values(): print(f"点数: {score}")
# 平均点を計算total = 0count = 0for score in student_scores.values(): total += score count += 1average = total / countprint(f"平均点: {average:.1f}")
.values()
メソッドを使うと、辞書の値だけを取得できます。
この例では、全生徒の点数を表示した後、平均点を計算しています。
:.1f
は小数点以下1桁で表示するための指定です。
キーと値を同時に処理する
# 名前と点数を同時に処理print("成績一覧:")for name, score in student_scores.items(): print(f"{name}さん: {score}点", end=" ") # 成績の評価を追加 if score >= 90: print("(優秀!)") elif score >= 80: print("(良好)") else: print("(頑張ろう)")
.items()
メソッドを使うと、キーと値を同時に取得できます。
for name, score in
のように2つの変数を指定することで、キー(name)と値(score)を別々の変数で受け取れます。
if文と組み合わせて、点数に応じたコメントも表示しています。
入れ子のfor文で複雑な処理をしてみよう
for文の中に別のfor文を書くことで、より複雑な繰り返し処理ができます。
これを「入れ子のfor文」や「ネストしたfor文」と呼びます。
二重ループの基本
# 基本的な二重ループprint("座標を表示:")for x in range(3): for y in range(3): print(f"({x}, {y})", end=" ") print() # 行の終わりで改行
この例では、外側のループが1回実行されるたびに、内側のループが3回実行されます。
結果として、(0,0)から(2,2)までの座標がマトリックス状に表示されます。
実践的な二重ループの例
# 掛け算表を作るprint("掛け算表:")for i in range(1, 4): # 1から3まで for j in range(1, 4): # 1から3まで result = i * j print(f"{result:2d}", end=" ") print()
print("時間割を作る:")days = ["月", "火", "水"]periods = ["1限", "2限", "3限"]
for day in days: print(f"{day}曜日:") for period in periods: print(f" {period}: 授業")
最初の例では、3×3の掛け算表を作成しています。
2番目の例では、曜日と時限を組み合わせて時間割を表示しています。 このように、リストとrangeを組み合わせることもできます。
複雑なデータ構造の処理
# クラスの成績表(リストの中にリストがある)class_data = [ ["田中", 85, 90, 78], # [名前, 国語, 数学, 英語] ["佐藤", 92, 88, 95], ["鈴木", 78, 82, 85]]
print("成績一覧:")for student in class_data: name = student[0] scores = student[1:] # 2番目以降の要素(点数) print(f"{name}さん:") subjects = ["国語", "数学", "英語"] for i, score in enumerate(scores): subject = subjects[i] print(f" {subject}: {score}点") total = sum(scores) average = total / len(scores) print(f" 合計: {total}点, 平均: {average:.1f}点") print()
この例では、2次元のリスト(リストの中にリストがある構造)を処理しています。
enumerate()
関数を使うと、リストの要素とそのインデックス(位置)を同時に取得できて便利です。
sum()
関数はリストの合計を、len()
関数はリストの長さを計算します。
break文とcontinue文で繰り返しを制御しよう
for文の流れを途中で変更したいときは、break
文やcontinue
文を使います。
これらを使うことで、より柔軟な繰り返し処理ができます。
break文で繰り返しを途中で止める
# 特定の条件で繰り返しを終了numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]for num in numbers: if num > 5: print(f"{num}が見つかったので終了します") break print(f"処理中: {num}")
print("繰り返し処理完了")
break
文は、for文を完全に終了させます。
この例では、6以上の数値が見つかった時点で繰り返しを止めています。 break後は、for文の外の処理(「繰り返し処理完了」の表示)に進みます。
continue文で現在の処理をスキップする
# 偶数をスキップして奇数だけを表示numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]for num in numbers: if num % 2 == 0: # 偶数の場合 continue # この回の処理をスキップ print(f"奇数: {num}")
print("成績処理の例:")scores = [85, -1, 92, 78, -1, 95] # -1は欠席を意味for score in scores: if score == -1: print("欠席のためスキップ") continue print(f"点数: {score}")
continue
文は、その回の処理だけをスキップして、次の繰り返しに進みます。
最初の例では偶数をスキップし、2番目の例では欠席者(-1)をスキップしています。 breakとは違い、for文自体は続行されます。
else文との組み合わせ
# リストの中から特定の値を探すnumbers = [1, 3, 5, 7, 9]target = 6
print(f"{target}を探しています...")for num in numbers: if num == target: print(f"{target}が見つかりました!") breakelse: print(f"{target}は見つかりませんでした")
# 別の例:全ての条件をチェックscores = [85, 90, 78, 92, 88]for score in scores: if score < 60: print("不合格者がいます") breakelse: print("全員合格です!")
for文の後にelse
文を書くと、for文が正常に終了した場合(breakで中断されなかった場合)にelse文が実行されます。
これは、「探し物が見つからなかった」や「全ての条件をクリアした」ような場合によく使われるパターンです。
実践的なfor文の活用例
実際のプログラムでよく使われるfor文のパターンを見てみましょう。
これらを覚えておくと、様々な場面で応用できます。
データ分析での活用
# 売上データの分析monthly_sales = [ {"month": "1月", "sales": 100000}, {"month": "2月", "sales": 120000}, {"month": "3月", "sales": 95000}, {"month": "4月", "sales": 110000}, {"month": "5月", "sales": 130000}]
print("=== 売上レポート ===")total_sales = 0best_month = ""best_sales = 0
for data in monthly_sales: month = data["month"] sales = data["sales"] print(f"{month}: {sales:,}円") total_sales += sales # 最高売上月を記録 if sales > best_sales: best_sales = sales best_month = month
print(f"総売上: {total_sales:,}円")print(f"最高売上月: {best_month}({best_sales:,}円)")average = total_sales / len(monthly_sales)print(f"平均売上: {average:,.0f}円")
この例では、辞書のリストを使って売上データを分析しています。
各月の売上を表示しながら、同時に合計・最高・平均を計算しています。
:,
を使うと数値に3桁区切りのカンマが表示されて読みやすくなります。
ファイル処理での活用
# 擬似的なファイル処理の例log_lines = [ "2024-01-15 10:30:00 INFO ユーザーログイン", "2024-01-15 10:35:00 ERROR データベース接続失敗", "2024-01-15 10:40:00 INFO データ更新完了", "2024-01-15 10:45:00 WARNING メモリ使用量が80%を超過", "2024-01-15 10:50:00 INFO ユーザーログアウト"]
print("=== ログ分析結果 ===")error_count = 0warning_count = 0
for line_num, line in enumerate(log_lines, 1): # 各行を空白で分割 parts = line.split() if len(parts) >= 3: timestamp = f"{parts[0]} {parts[1]}" level = parts[2] message = " ".join(parts[3:]) print(f"行{line_num}: [{level}] {message}") if level == "ERROR": error_count += 1 elif level == "WARNING": warning_count += 1
print(f"エラー数: {error_count}")print(f"警告数: {warning_count}")
enumerate()
関数を使うと、リストの要素と行番号を同時に取得できます。
文字列の.split()
メソッドでログ行を分割し、レベル別に集計しています。
実際のプログラムでは、このようなログ分析がよく行われます。
リスト内包表記という便利な書き方
# 通常のfor文numbers = [1, 2, 3, 4, 5]squared = []for num in numbers: squared.append(num ** 2)print("通常のfor文:", squared)
# リスト内包表記(短く書ける)squared = [num ** 2 for num in numbers]print("リスト内包表記:", squared)
# 条件付きのリスト内包表記even_squared = [num ** 2 for num in numbers if num % 2 == 0]print("偶数の二乗:", even_squared)
# 文字列の処理fruits = ["apple", "banana", "cherry"]upper_fruits = [fruit.upper() for fruit in fruits]print("大文字変換:", upper_fruits)
リスト内包表記は、for文を1行で書ける便利な方法です。
慣れてきたら使ってみてください。特に、リストの変換処理でよく使われます。
.upper()
は文字列を大文字に変換するメソッドです。
まとめ
Python for文の基本から実践的な活用方法まで、詳しく解説しました。
重要なポイントをおさらい:
- 基本構文:
for 変数 in 繰り返し対象:
で繰り返し処理を記述 - リスト処理:要素を1つずつ取り出して処理する最も基本的な使い方
- range関数:決まった回数だけ繰り返したいときに便利
- 辞書処理:キー、値、またはその両方を取得して処理
- 制御文:breakで中断、continueでスキップ、elseで正常終了時の処理
for文は、プログラミングで最も頻繁に使われる構文の1つです。
リストの処理、データ分析、ファイル操作など、様々な場面で活躍します。 まずは簡単なリスト処理から始めて、徐々に複雑な処理にもチャレンジしてみてください。
ぜひ実際にコードを書いて実行しながら、for文の便利さを体験してみてくださいね!