はじめに
プログラミングにおいて、
前回の記事でまとめた条件分岐(if文)と
並んで登場頻度が高く、重要な構文のひとつが
「繰り返し処理(ループ)」です。
たとえば、
「1〜100までの数を順番に表示したい」
「リストに入っている全ユーザーの情報を一人ずつ処理したい」
「条件に合うデータだけを抽出したい」
こんなときに登場するのが、for文
や while文
を使った繰り返し処理です。
繰り返し処理をうまく使いこなせるようになると、
- データの自動処理(バッチ処理)
- Webスクレイピング
- テキストの一括操作
- 検索・抽出・変換の自動化
といった、いわゆる「面倒な処理」や「ルーティン作業」を、
シンプルなコードでサクッと片付けられるようになります。
また、プログラミングの処理構造は
条件分岐と繰り返しを組み合わせで作られているため、
しっかりと押さえることでプログラミング未経験でも
要点を掴むことができます。
今回の記事では、Python初心者として私が学んだ
「繰り返し処理」について、基本構文から便利な組み合わせ方までを
まとめていきます。
この記事はこんな方におすすめです!
- プログラミング未経験の方
- Pythonの
for文
やwhile文
の使い方が
まだ曖昧な方 range()
やenumerate()
、zip()
など
便利な組み合わせを
実践で使えるようになりたい方- データ処理や自動化に強くなりたい初学者
- 副業を目指したい方
第1章:繰り返し処理の基本
まず繰り返し処理(ループ処理)とは、
ある条件のもとで同じ処理を何度も行いたいときに使います。
Pythonでは主に以下の2つの方法があります。
while
文:
条件が真の間、繰り返し続けるfor
文:
あらかじめ決まった範囲・リストなどの
要素を順に取り出して処理
それぞれの違いと基本的な使い方を見ていきましょう。
while文の基本構文
while 条件式:
処理内容
条件式
がTrue
である限り、処理内容
が繰り返されます。
例:1〜5までの数を出力
count = 1
while count <= 5:
print(count)
count += 1
ポイントとして、
- 無限ループと呼ばれるバグを含みやすいため、
条件式の設定が重要
例題のソースコードはcount
の変数が
1ずつ増えることで終了させられる - ループの終了条件が曖昧なときや、
条件によって処理を続けるかどうか
判断したいときに適している
for文の基本構文
for 変数 in 反復構造体:
処理内容
反復構造体
はコンテナ(リストなど)や文字列など
「繰り返せるもの(イテラブル)」となるデータの集合です。
Pythonのfor文
は、この「繰り返せるもの」を
順に1つずつ処理します。
例:リストの要素を繰り返す
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
range()関数での数値の繰り返しもfor文
ではよく利用されます。
range()
は、「開始値から終了値 - 1まで」の数列
を生成する関数になります。
例:0から4まで繰り返す
for i in range(5): #0~4の数列を生成
print(i)
rangeの構文とバリエーション
range(終了値) # 0〜(終了値-1)まで
range(3) #0,1,2が生成
range(開始値, 終了値) # 開始値〜(終了値-1)まで
range(1,3) #1,2が生成
range(開始値, 終了値, ステップ) # ステップ間隔で生成
range(1,7,2) #1,3,5が生成
range()
はそのままではリストではなく、
rangeオブジェクトという特別な型です。
デバッグ中に中身を確認したいときや、
forループ以外で使いたいときには
リストに変換するのが便利です。
list(range(5)) # → [0, 1, 2, 3, 4]
whileとforの使い分け
状況 | 推奨ループ |
---|---|
処理回数があらかじめ決まっている場合 | for文 |
条件に応じて処理を継続・終了したい場合 | while文 |
例えば「0になるまで繰り返す」
「ユーザーが 'q' を押すまで繰り返す」
などは while
が向いています。
一方で、「10回処理する」
「リストの中身を1つずつ処理する」
などは for
が分かりやすいです。
for
はシーケンスやrange()
と組み合わせることで、
明確な範囲を効率的に処理できます。
使い分けのひとつの目安は
「処理回数が決まっているかどうか」で判断し、
決まっていればfor
、
それ以外ならwhile
を基本としましょう。
第2章:繰り返し処理の制御
繰り返し処理では、ループの途中で
「処理を止めたい」
「一部だけスキップしたい」
といった場面がよくあります。
そんなときにPythonで使うのが次の3つの制御文です。
break
:
ループを途中で終了するcontinue
:
現在のループ処理をスキップして、
次のループに移るreturn
:
関数自体の処理を終了し、
必要があれば値を返す
それぞれの違いと使いどころは以下の様になります。
break:ループを強制終了
break
は、ループ処理を途中で終了したいときに使います。
条件を満たしたらそこでループ処理を打ち切ります。
例:特定の値が見つかったら終了
fruits = ["apple", "banana", "orange", "grape"]
for fruit in fruits:
if fruit == "orange":
print("オレンジ発見!処理を終了します")
break
print(f"{fruit} を確認中…")
出力結果:
apple を確認中…
banana を確認中…
オレンジ発見!処理を終了します
使いどころのポイント:
- リストやデータの中から
「最初に見つけた一致する値」
だけ処理したいとき - 特定の条件で処理を即終了し、
無駄な繰り返しを省きたいとき - 無限ループ (
while True:
) の中で
「終了条件」を手動で制御したいとき
continue:その回だけスキップ
continue
は、現在のループ処理だけをスキップし、
次の繰り返し処理へと進みます。
例:偶数だけスキップして出力
for i in range(1, 6):
if i % 2 == 0:
continue # 偶数はスキップ
print(f"{i} は奇数です")
出力結果:
1 は奇数です
3 は奇数です
5 は奇数です
使いどころのポイント:
- データの中に「無視したい条件」がある場合
- 条件に合致しないときに、
残りの処理をスキップしたい場合
return:関数を途中で終了する
return
は関数の中で使います。
ループを含む関数の処理を途中で終了させたいときに使い、
「値を返す」こともできます。
「関数」については、次回の記事でまとめる予定です。
わからない方は、現時点では処理の塊ぐらいの認識で大丈夫です。
例:マイナスの値があったら関数ごと終了
def check_values(values):
for v in values:
if v < 0:
print("負の値が見つかりました")
return # 関数終了
print(f"{v} は有効です")
print("すべての値が正です")
check_values([10, 5, -2, 8])
出力結果:
10 は有効です
5 は有効です
負の値が見つかりました
使いどころのポイント:
- バリデーションチェックなどで
「条件を満たさなければ即終了」したいとき - 処理の途中でも結果が出た時点で
関数の残りをスキップしたいとき - 関数内のループで break よりも
外側まで一気に抜けたい場合
break / continue / return の違いまとめ
構文 | 対象 | 処理の内容 |
---|---|---|
break | ループ | ループ全体を即終了し、外に出る |
continue | ループ | 今の1回だけスキップして、次のループに進む |
return | 関数 | 関数全体の処理を終了(ループごと終了する) |
それぞれの実務でありがちな使い方としては、
- ユーザーリストの中から
条件を満たす最初の人だけ処理
→break
- 不正なデータはスキップして処理続行
→continue
- バリデーションに失敗したら関数終了
→return
3つの使い分けを意識することで、
より効率的で読みやすいコードを書くことができます。
第3章:コンテナ型の繰り返し処理
Pythonでは、リスト・タプル・セット・ディクショナリなど
「複数の値をまとめて扱える型」のことをコンテナ型と呼びます。
これらのコンテナは、for
文を使って
簡単に中身を1つずつ取り出して処理できます。
特に実務で頻出なのがこの使い方です。
それぞれのデータ型に応じたループの書き方と
注意点をまとめていきます。
リストやタプルの繰り返し処理
リストやタプルは、順序付きのデータを格納できます。
そのためfor
文で1つずつ順番に取り出せます。
例:リストの要素を繰り返す
colors = ["red", "blue", "green"]
for color in colors:
print(color)
出力結果:
red
blue
green
タプルの繰り返しでもリスト同様の記述になります。
point = (10, 20, 30)
for value in point:
print(value)
出力結果:
10
20
30
セットの繰り返し処理
セットは「順序のない重複を許さない集合」です。
繰り返し処理は可能ですが、
順序は保証されない点に注意しましょう。
順序保証がないため、結果が毎回同一とはなりません。
unique_values = {3, 1, 4, 1, 5}
for val in unique_values:
print(val)
出力結果(順序はランダム):
1
3
4
5
セットは同じ値は1つしか保持されず、
順番もバラバラになる点には注意が必要です。
ディクショナリの繰り返し処理
ディクショナリは「キーと値のペア」で構成されたコンテナです。
ディクショナリについては、
ループ方法が以下のように複数あるので注意が必要です。
- キーのみのループ
- 値のみのループ
- キーと値のループ
例:キーのみをループ(デフォルト動作)
for文
の反復構造体にディクショナリが渡される場合は
キーが繰り返しの対象となります。
また、ディクショナリ.keys()
を受け渡すことでも同様です。
person = {"name": "Alice", "age": 30, "city": "Tokyo"}
for key in person:
print(key)
for key in person.keys(): #keys()でも同様
print(key)
出力結果:
name
age
city
例:値のみをループ
ディクショナリの値のみをループするときは、ディクショナリ.values()
を利用します。
person = {"name": "Alice", "age": 30, "city": "Tokyo"}
for val in person.values():
print(val)
出力結果:
Alice
30
Tokyo
例:キーと値をループ
ディクショナリのキーと値をループするときは、ディクショナリ.items()
を利用します。
person = {"name": "Alice", "age": 30, "city": "Tokyo"}
for key, val in person.items():
print(f"{key} は {val} です")
出力結果:
name は Alice です
age は 30 です
city は Tokyo です
入れ子構造のループ
コンテナの中に
さらにコンテナがある場合(多次元リストなど)も、
ネストしたfor
文でループできます。
matrix = [[1, 2], [3, 4], [5, 6]]
for row in matrix:
for num in row:
print(num, end=" ")
出力結果:
1 2 3 4 5 6
第4章:繰り返しを効率化する関数
ここまでで基本的なfor
、while
を
使った繰り返し処理についてまとめました。
ここからは、繰り返し処理を
もっと簡潔に・効率よく・Pythonらしく
記述できるようになるために、
以下の2つの組み込み関数を紹介します。
enumerate()
:
インデックス(番号)付きで要素を取得zip()
:
複数のリストやコンテナを同時にループ処理
enumerate():インデックス付きで繰り返す
リストや文字列などをfor
で繰り返すとき、
「現在何番目の要素なのか」
も一緒に取得したい場面はよくあります。
そんなときに便利なのがenumerate()
関数です。
例:リストの要素とインデックスを同時に取得
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
print(f"{index}番目のフルーツは {fruit} です")
出力結果:
0番目のフルーツは apple です
1番目のフルーツは banana です
2番目のフルーツは cherry です
ポイント:
enumerate()
はデフォルトで
0からカウント開始enumerate(リスト, 開始番号)
とすれば開始番号を変更可能
例:開始番号を変える場合
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits, 1): # 1から始める
print(f"{index}個目 → {fruit}")
出力結果:
1個目 → apple
2個目 → banana
3個目 → cherry
zip():複数のリストを同時にループ処理
複数のリストを「対応づけて」
同時に処理したい場面もよくあります。
たとえば「名前リスト」と「点数リスト」があって、
それぞれの組を1つずつ扱いたいときなどです。
そんなときに活躍するのが zip()
関数です。
例:名前と点数を同時に処理
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}さんの点数は {score} 点です")
出力結果:
Aliceさんの点数は 85 点です
Bobさんの点数は 92 点です
Charlieさんの点数は 78 点です
ポイント:
- 各リストの要素を「ペア」にして1つずつ取り出す
- 要素数が異なる場合、
一番短いリストに合わせて処理
例:要素数の異なるリストの処理
names = ["Alice", "Bob"]
scores = [85, 92, 78] # 長い
for name, score in zip(names, scores):
print(name, score)
出力結果:
Alice 85
Bob 92
→ "78"
は出力されない。(names
が2要素のため)
応用:enumerateとzipの組み合わせ
zipにenumerateを組み合わせると、複数データ+インデックスを同時に扱うこともできます。
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for i, (name, score) in enumerate(zip(names, scores), 1):
print(f"{i}番目: {name} → {score}点"
出力結果:
1番目: Alice → 85点
2番目: Bob → 92点
3番目: Charlie → 78点
第5章:まとめ & 次回予告
今回は、Pythonの繰り返し処理(ループ)について、
基本的な使い方から便利な関数や活用例を学んできました。
繰り返し処理は、条件分岐と並んでプログラミングにおいて
基礎中の基礎ですが、しっかり理解しておくことで
応用の幅が大きく広がります。
ループ処理を使えるようになることで、
「大量のデータを一括処理する」
「条件に応じて動きを変える」
「結果を集計する」
など、さまざまな自動化タスクが実現可能になります。
特に副業や在宅ワークで見られることのある、
- Excelデータの整形や自動処理
- Webサイトの情報収集(スクレイピング)
- 大量メールの送信やログ解析
といった業務では、ループ処理は欠かせない考え方です。
プログラミング未経験だと、
繰り返しの処理イメージは難しいですが
そんな中でも「手を動かして試すこと」が何より大切です。
ぜひ、繰り返し処理を、
身近なデータや課題に使ってみてください。
次回は、Pythonだけでなくプログラムを作る上の構造で
重要な要素のひとつ、関数(メソッド)について学んでいきます。
関数を定義することで、処理の再利用性が高まり、
コードの可読性や保守性が大きく向上します。
def
文による関数定義の基本- 引数・戻り値の扱い方
- デフォルト引数・キーワード引数
- 実務で役立つ関数の組み立て方
こういった内容を中心に学習していきます。
▶次回の記事はこちら:
[現在準備中です!少々お待ちください!]