12. for ループと range() による反復
第11章では、条件が真である限り処理を繰り返す while ループについて学びました。while ループは強力で柔軟ですが、ループカウンタを手動で管理し、条件を更新する必要があります。Python には別の種類のループである for ループが用意されており、別の(しかし極めて一般的な)タスク、つまりデータのコレクションを1つずつ処理することを得意としています。
for ループは Python の機能の中でも最も頻繁に使われるものの1つです。ファイル内の行を処理する場合でも、数値列から統計を計算する場合でも、文字列中の各文字をチェックする場合でも、for ループはデータのシーケンスを扱うための、すっきりして読みやすい方法を提供します。この章では、for ループがどのように動作するのか、カウント処理に Python の range() 関数をどう使うのか、そして break、continue、さらにあまり知られていない else 節でループ実行をどう制御するのかを探っていきます。
12.1) for ループと反復の概念
12.1.1) for ループとは?
Python の for ループ(for loop) は、シーケンス内の各要素に対して1回ずつコードブロックを繰り返します。シーケンスは文字列、リスト(詳細は第14章で学びます)、またはその他の任意の要素のコレクションになり得ます。while ループとの主な違いは、for ループは反復処理を自動で扱う点です。カウンタを手動で更新したり、条件をチェックしたりする必要はありません。
for ループの基本構造は次のとおりです。
for variable in sequence:
# 各要素に対して実行するコードブロック
# variable には現在の要素が入りますfor ループは次のように動作します。
- Python はシーケンスから最初の要素を取り出し、それを変数に代入します
- (
for文の下でインデントされた)コードブロックが実行されます - Python は次の要素を取り出して変数に代入し、再びブロックを実行します
- これが、シーケンス内のすべての要素が処理されるまで続きます
文字列を使った簡単な例を見てみましょう。
# 名前の各文字を表示する
name = "Alice"
for character in name:
print(character)Output:
A
l
i
c
eこの例では、文字列 "Alice" がシーケンスです。ループは各文字を1つずつ処理します。最初の反復では character は 'A' を持ち、2回目の反復では 'l' を持ち…という具合です。変数名 character は任意で、letter、char、あるいは単に c と呼んでもかまいません。コードの目的が明確になる名前を選んでください。
ループ変数の命名規則(Loop Variable Naming Conventions): for ループを書くときは、各要素が何を表しているかを説明する変数名を選びます。値がコード理解に重要な場合は character、student、score のように説明的な名前を使ってください。反復回数をただ数えるだけの単純な数値カウンタでは i を使います。値がまったく不要な場合は _(アンダースコア)を使います。これは Python の慣習で「この値は気にしない」という意味です。
単語の母音を数える実用的な例です。
# 単語の母音を数える
word = "Python"
vowel_count = 0
for letter in word:
if letter in "aeiouAEIOU":
vowel_count += 1
print(f"母音を見つけました: {letter}")
print(f"母音の合計: {vowel_count}")Output:
母音を見つけました: o
母音の合計: 1ループは "Python" の各文字を調べます。母音を見つけると(第7章で学んだ in 演算子を使用します)、カウンタを増やし、メッセージを表示します。このパターン(ループ前にカウンタを初期化し、ループ内で更新する)は、プログラミングで極めて一般的です。
結果を作り上げることで蓄積を示す別の例です。
# 文字列内の大文字を数える
text = "Python Programming"
uppercase_count = 0
for char in text:
if char.isupper():
uppercase_count += 1
print(f"'{text}' に大文字が {uppercase_count} 個見つかりました")Output:
'Python Programming' に大文字が 2 個見つかりましたこの例は蓄積のパターンを示しています。ループ前にカウンタを0で初期化し、各文字を調べて大文字を見つけたらカウンタを増やします。ループが完了した後、蓄積した結果を使います。このパターンはプログラミングで常に登場します。特定の条件を満たす要素を数える、値を合計する、結果を少しずつ作り上げる、といった場面です。
12.1.2) 反復処理の理解
反復(iteration) とは、コレクション内の各要素に対してアクションを繰り返すプロセスです。オブジェクトが 反復可能(iterable) だと言うとき、それは Python が for ループで要素を1つずつ処理できることを意味します。文字列は反復可能です。文字を順番にループできます。まもなく見るように、Python の多くの型も反復可能です。
for ループの変数(例の character や letter など)は ループ変数(loop variable) と呼ばれます。この変数は for ループによって自動的に作られ、ループのスコープ内でのみ存在します。ループを1回回るたびに、Python はシーケンスから次の要素をこの変数に代入します。
ループ変数がどう変化するかを示す例です。
# ループ変数がどのように更新されるかを示す
colors = "RGB" # Red, Green, Blue
for color_code in colors:
print(f"カラーコードを処理中: {color_code}")
print(f" これは '{color_code}' の反復です")Output:
Processing color code: R
This is iteration for 'R'
Processing color code: G
This is iteration for 'G'
Processing color code: B
This is iteration for 'B'ループを回るたびに、color_code は文字列内の別の文字を保持します。ループは自動的に次の文字へ進むため、シーケンスを進めるためのコードを書く必要はありません。
12.1.3) 反復処理における for ループと while ループの比較
同じように文字ごとの処理を while ループでも実現できますが、コードが増え、手動管理が必要になります。
# while ループで文字列を反復する(より複雑)
name = "Alice"
index = 0
while index < len(name):
character = name[index]
print(character)
index += 1 # インデックスは手動で更新する必要がありますこれは先ほどの for ループの例と同じ出力になりますが、次の作業が必要だった点に注目してください。
- インデックス変数を作成して初期化する
- 各反復で条件
index < len(name)をチェックする name[index]を使って手動で文字を取り出す- インデックスを増やすのを忘れない(忘れると無限ループになります!)
for ループなら、これらをすべて自動で処理してくれます。
# for ループで文字列を反復する(よりシンプル)
name = "Alice"
for character in name:
print(character)こちらのほうがずっとすっきりしていて、ミスも起こりにくいです。コレクション内の各要素を処理したいとき、for ループは自然な選択です。反復ロジックをより細かく制御したい場合や、何回繰り返すかを事前に把握できない場合は while ループを使ってください。
12.2) カウント用ループで range() を使う
12.2.1) range() 関数の紹介
for ループは既存のシーケンスを処理するのが得意ですが、特定の回数だけ処理を繰り返したいこともよくあります。たとえばメッセージを5回表示したり、最初の10個の平方数を計算したりする場合です。Python の range() 関数は、for ループで反復できる数値のシーケンスを生成します。
range() の最も単純な形は引数を1つ取り、0 から始まる整数を指定した個数だけ生成します。
# 0 から 4 までの数を表示する
for number in range(5):
print(number)Output:
0
1
2
3
4⚠️ よくある間違い(Common Mistake): 初心者は range(5) が 1, 2, 3, 4, 5 を生成すると期待しがちですが、実際には 0, 1, 2, 3, 4 を生成します。覚えておいてください: range(n) は 0 から始まり、n の手前で止まります。この「手前で止まる」という挙動は、第5章で学んだ Python のスライシングと一貫しています。range は(デフォルトで)0 から始まり、stop 値を含まずにそこまで進みます。
このパターンは、特定回数だけ処理を繰り返すのに最適です。
# 挨拶を5回表示する
for i in range(5):
print(f"Welcome! (iteration {i})")Output:
Welcome! (iteration 0)
Welcome! (iteration 1)
Welcome! (iteration 2)
Welcome! (iteration 3)
Welcome! (iteration 4)変数 i はループカウンタとしてよく使われる名前(「index」または「iteration」の略)ですが、有効な変数名であれば何でも構いません。ループ変数の値がロジック上重要でない場合、i は慣習的な選択です。
12.2.2) 開始値と終了値を指定する
range() に引数を2つ渡すと、開始位置と終了位置の両方を指定できます。
# 1 から 5 までの数を表示する
for number in range(1, 6):
print(number)Output:
1
2
3
4
5ここでは range(1, 6) が 1 から始まり 6 の手前で止まるため、1 から 5 までの数が得られます。これは 0 以外の値から数えたいときに便利です。
これを使って簡単な掛け算表を計算してみましょう。
# 7の段を1から10まで表示する
multiplier = 7
for number in range(1, 11):
result = multiplier * number
print(f"{multiplier} × {number} = {result}")Output:
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70このループは 1 から 10 まで実行され、各数に 7 を掛けます。これは range() によって、特定の数値シーケンスに対して計算を簡単に行えることを示しています。
12.2.3) ステップ値を使う
range() 関数は3つ目の任意引数として ステップ(step) 値を受け取り、数値の増分(または減分)を決定します。
# 0 から 10 までの偶数を表示する
for number in range(0, 11, 2):
print(number)Output:
0
2
4
6
8
10range(0, 11, 2) では、0 から始まり 11 の手前で止まり、毎回 2 ずつ増えます。これにより 0 から 10 までの偶数がすべて得られます。
負のステップを使って逆順に数えることもできます。
# 10 から 1 までカウントダウンする
for number in range(10, 0, -1):
print(number)
print("Liftoff!")Output:
10
9
8
7
6
5
4
3
2
1
Liftoff!ここでは range(10, 0, -1) が 10 から始まり 0 の手前で止まり、毎回 1 ずつ減ります。負のステップにより range は逆方向に数えます。
1 から 100 までの奇数の合計を計算する実用例を見てみましょう。
# 1 から 100 までの奇数をすべて合計する
total = 0
for number in range(1, 101, 2): # 1から開始し、2ずつ増やす
total += number
print(f"Sum of odd numbers from 1 to 100: {total}")Output:
Sum of odd numbers from 1 to 100: 2500range(1, 101, 2) を使うことで、奇数(1, 3, 5, ..., 99)だけを生成でき、ループ内で各数の偶奇をチェックする必要がありません。これによりコードはより効率的になり、意図も明確になります。
12.2.4) range() が実際に返すもの
range() 関数はメモリ上に数値のリストを作るのではなく、必要に応じて数値を生成する range オブジェクト(range object) を作ります。これは特に大きな range に対してメモリ効率が良いです。
# range() はリストではなく range オブジェクトを返します
numbers = range(1000000)
print(type(numbers)) # Output: <class 'range'>
print(numbers) # Output: range(0, 1000000)Output:
<class 'range'>
range(0, 1000000)この range は100万個の数を表しますが、Python は反復するまで実際に100万個すべてを作らないため、使用メモリは非常に少なくて済みます。各数はループが必要としたときにだけ生成されます。
実際の数値リストが必要なら、range を変換できます。
# range をリストに変換する
small_numbers = list(range(5))
print(small_numbers) # Output: [0, 1, 2, 3, 4]Output:
[0, 1, 2, 3, 4]リストと list() 関数については第14章で詳しく学びます。今は、range() は変換なしでも for ループと完璧に連携する、ということだけ覚えておいてください。
12.3) 文字列やその他のシーケンスを反復する
12.3.1) 文字列を1文字ずつ反復する
これまでに文字列を反復する例をいくつも見てきました。文字列は文字のシーケンスであり、各文字を個別に調べたり処理したりする必要がよくあるため、これは for ループの最も一般的な使い方の1つです。
少なくとも1つの数字を含むことをチェックしてパスワードを検証する例です。
# パスワードに少なくとも1つ数字が含まれるかチェックする
password = "secure123"
has_digit = False
for character in password:
if character.isdigit():
has_digit = True
print(f"数字を見つけました: {character}")
if has_digit:
print("Password contains at least one digit ✓")
else:
print("Password must contain at least one digit ✗")Output:
Found digit: 1
Found digit: 2
Found digit: 3
Password contains at least one digit ✓ループは .isdigit() 文字列メソッド(第5章で学びました)を使って各文字を調べます。数字が見つかると has_digit を True に設定します。ループが完了したらフラグをチェックして、数字が見つかったかどうかを判定します。
文字の種類を数える別の実用例です。
# 文字列内の文字種を分析する
text = "Hello, World! 123"
letters = 0
digits = 0
spaces = 0
other = 0
for char in text:
if char.isalpha():
letters += 1
elif char.isdigit():
digits += 1
elif char.isspace():
spaces += 1
else:
other += 1
print(f"Letters: {letters}")
print(f"Digits: {digits}")
print(f"Spaces: {spaces}")
print(f"Other: {other}")Output:
Letters: 10
Digits: 3
Spaces: 2
Other: 2このループは第5章で学んだ文字列メソッドを使って、各文字を分類します。if-elif-else 連鎖(第8章)により、各文字は必ず1つのカテゴリだけにカウントされます。
12.3.2) インデックスを使って文字列を処理する
文字とその位置の両方が必要な場合があります。そのときは range(len(string)) を使ってインデックスを反復できます。
# 特定の文字の位置を見つける
text = "Mississippi"
search_char = "s"
print(f"'{text}' の中から '{search_char}' を探しています:")
for index in range(len(text)):
if text[index] == search_char:
print(f" インデックス {index} で見つかりました")Output:
Looking for 's' in 'Mississippi':
Found at index 2
Found at index 3
Found at index 5
Found at index 6ループは 0 から len(text) - 1 までのインデックスを反復します。各インデックスに対して、その位置の文字が探している文字と一致するかをチェックします。この方法は、何かが存在することだけでなく、どこに現れるかを知りたい場合に役立ちます。
12.3.3) その他のシーケンス型を反復する
for ループは、Python の任意の反復可能なシーケンスで動作します。この章では文字列に焦点を当てましたが、他のシーケンス型については後の章で学びます。たとえば第14章では、あらゆる型の複数の値を保持できる順序付きコレクションであるリストについて学びます。どの型のシーケンスを反復する場合でも for ループの構文は同じで、ループがシーケンスから各要素を取り出す処理を自動的に行います。
12.4) for ループで break と continue を使う
12.4.1) for ループでの break 文
while ループ(第11章)と同様に、break 文は for ループを即座に終了し、残りの反復をすべてスキップします。探しているものが見つかり、これ以上探索する必要がない場合に便利です。
特定の文字を探す例です。
# 文字列の中で最初の母音を探す
text = "Python"
found_vowel = False
for char in text:
if char.lower() in "aeiou":
print(f"First vowel found: {char}")
found_vowel = True
break # 最初の母音が見つかったら探索を止める
if not found_vowel:
print("No vowels found")Output:
First vowel found: obreak がなければ、最初の母音を見つけた後でも残りの文字をすべて調べ続けます。break 文を使うことで、タスクが完了した時点で停止でき、コードはより効率的になります。
無効な文字がないかチェックしてユーザー入力を検証する実用例です。
# ユーザー名が許可された文字だけを含むかチェックする
username = "alice_123"
allowed = "abcdefghijklmnopqrstuvwxyz0123456789_"
is_valid = True
for char in username:
if char.lower() not in allowed:
print(f"Invalid character found: '{char}'")
is_valid = False
break # これ以上チェックする必要はない
if is_valid:
print(f"Username '{username}' is valid ✓")
else:
print(f"Username '{username}' is invalid ✗")Output:
Username 'alice_123' is valid ✓ループは各文字を許可セットと照合します。無効な文字が見つかったら問題を報告し、すぐにループを抜けます。無効だとわかった時点で、残りのユーザー名をチェックする意味はありません。
12.4.2) for ループでの continue 文
continue 文は、現在の反復の残りをスキップして、シーケンス内の次の要素へ進みます。ループ全体を抜けずに、特定の要素だけを飛ばしたいときに便利です。
特定の文字だけを処理する例です。
# 文字列から子音だけを表示する
word = "Programming"
for letter in word:
if letter.lower() in "aeiou":
continue # 母音をスキップする
print(letter, end="")
print() # 最後に改行するOutput:
Prgrmmngループが母音に出会うと continue により print() 文がスキップされ、次の文字へ進みます。子音だけが print に到達します。
次は、無効データをスキップしながら統計を計算する、より実用的な例です。.split() メソッド(第6章)は文字列のリストを返しますが、リストについては第14章で学びます。今は、for ループがその結果を反復できることだけ知っておいてください。
# 有効なテスト得点(0〜100)の平均を計算する
# .split() メソッドは文字列のリストを返します(第14章)
scores_input = "85 92 -5 78 105 90 88"
valid_scores = 0
total = 0
for score_str in scores_input.split():
score = int(score_str)
if score < 0 or score > 100:
print(f"Skipping invalid score: {score}")
continue # このスコアをスキップする
valid_scores += 1
total += score
if valid_scores > 0:
average = total / valid_scores
print(f"Average of {valid_scores} valid scores: {average:.1f}")
else:
print("No valid scores to average")Output:
Skipping invalid score: -5
Skipping invalid score: 105
Average of 5 valid scores: 86.6ループは各スコア文字列を処理します。無効なスコア(負の値、または100超)に出会うと、警告を表示し continue で合計への加算をスキップします。これにより、無効値は無視しつつ、有効なスコアをすべて処理できます。
12.4.3) break と continue を使うタイミング
break を使うのは次のような場合です:
- 何かを探していて、見つかったら止めたいとき
- 続けても意味がないエラー条件に遭遇したとき
- タスクを完了し、残りの要素を処理する必要がないとき
continue を使うのは次のような場合です:
- 条件に基づいて特定の要素をスキップしたいとき
- データをフィルタして、条件を満たす要素だけ処理したいとき
- 特殊ケースを早めに処理して、深いネストの
if文を避けたいとき
break と continue は、反復の通常の流れをいつ・なぜ変えるのかを明示することで、コードをより明確にできます。ただし使いすぎると読みづらくなることもあるため、本当に明確さが増す場合に使ってください。
12.5) for ループで else を使う
12.5.1) for-else パターン
Python の for ループは、任意で else 節をサポートしています。これはループが通常どおり完了した後、つまり break 文に遭遇せずにすべての要素を反復し終えたときに実行されます。最初は奇妙に感じるかもしれません(「if がないのに、なぜ else?」)が、「探していたものが見つかった」と「全部探したが見つからなかった」を区別するのに役立ちます。
基本構造は次のとおりです。
for item in sequence:
# ループ本体
if some_condition:
break
else:
# これは、break せずにループが完了した場合にのみ実行されます
print("Loop completed normally")else ブロックが実行されるのは、シーケンスを使い切ってループが自然終了した場合に限ります。break 文でループが早期終了した場合、else ブロックはスキップされます。
特定の値を探す実用例を見てみましょう。.split() メソッド(第6章)は文字列のリストを返しますが、リストについては第14章で学びます。
# 目的の数を探す
numbers = "2 4 6 8 10"
target = 7
for num_str in numbers.split():
num = int(num_str)
if num == target:
print(f"Found {target}!")
break
else:
print(f"{target} not found in the sequence")Output:
7 not found in the sequenceループはすべての数を探索します。7 は見つからないため、ループは通常どおり完了し else ブロックが実行されます。次に、存在する数を探してみましょう。
# 存在する目的の数を探す
numbers = "2 4 6 8 10"
target = 6
for num_str in numbers.split():
num = int(num_str)
if num == target:
print(f"Found {target}!")
break
else:
print(f"{target} not found in the sequence")Output:
Found 6!今度はループが 6 を見つけると break を実行し、else ブロックは完全にスキップされます。このパターンは、別のフラグ変数を用意することなく、「見つかった」と「見つからなかった」の両方をエレガントに扱えます。
12.5.2) for-else の実用例
for-else パターンは検索処理で特に有用です。文字列が数字だけを含むかを検証する例です。
# 文字列が有効な整数かチェックする
user_input = "12345"
for char in user_input:
if not char.isdigit():
print(f"Invalid: '{char}' is not a digit")
break
else:
print(f"'{user_input}' is a valid integer")Output:
'12345' is a valid integer入力に数字以外の文字が含まれていればループは break し、else ブロックは実行されません。すべての文字が数字ならループは通常どおり完了し、else ブロックが妥当性を確認します。
無効な入力でも試してみましょう。
# 文字列が有効な整数かチェックする(無効なケース)
user_input = "123a5"
for char in user_input:
if not char.isdigit():
print(f"Invalid: '{char}' is not a digit")
break
else:
print(f"'{user_input}' is a valid integer")Output:
Invalid: 'a' is not a digit12.5.3) for-else とフラグ変数の比較
for-else を学ぶ前は、見つかったかどうかを追跡するためにフラグ変数を使っていたかもしれません。
# フラグ変数を使う(従来の方法)
text = "Python"
found_vowel = False
for char in text:
if char.lower() in "aeiou":
print(f"Found vowel: {char}")
found_vowel = True
break
if not found_vowel:
print("No vowels found")Output:
Found vowel: ofor-else パターンならフラグ変数は不要になります。
# for-else を使う(より Python らしい)
text = "Python"
for char in text:
if char.lower() in "aeiou":
print(f"Found vowel: {char}")
break
else:
print("No vowels found")Output:
Found vowel: oどちらの方法でも正しく動きますが、for-else 版はより簡潔で、意図を明確に表現できます。「何かを探し、見つからなければこれをする」という意図を示し、else 節が「見つからなかった」ケースを直接表しています。
12.6) for ループと while ループの選び方
12.6.1) for ループを使うべきとき
次のような場合は for ループを使います。
1. コレクション内の各要素を処理するとき:
# 文字列の各文字を処理する
message = "Hello"
for char in message:
print(char.upper())Output:
H
E
L
L
O2. 特定回数だけ処理を繰り返す必要があるとき:
# 罫線を表示する
for i in range(40):
print("-", end="")
print()Output:
----------------------------------------3. 数値の範囲を反復するとき:
# 5の階乗を計算する
factorial = 1
for n in range(1, 6):
factorial *= n
print(f"5! = {factorial}")Output:
5! = 1204. 何を反復するか事前にわかっているとき:
# 既知の値のシーケンスを処理する
grades = "A B C D F"
for grade in grades.split():
print(f"Grade: {grade}")Output:
Grade: A
Grade: B
Grade: C
Grade: D
Grade: Ffor ループの重要な特徴は、確定的反復(definite iteration) で動作することです。含まれる要素数を事前に知らなくても、どのシーケンスを反復するかはわかっています。
12.6.2) while ループを使うべきとき
次のような場合は while ループを使います。
1. 条件が変わるまで繰り返すとき:
# 有効な入力が得られるまで尋ね続ける
while True:
age_input = input("Enter your age: ")
if age_input.isdigit():
age = int(age_input)
if age > 0:
print(f"Age recorded: {age}")
break
print("Please enter a valid positive number")2. 何回反復が必要かわからないとき:
# 1000を超えるまで数を何回2倍できるか数える
number = 1
count = 0
while number <= 1000:
number *= 2
count += 1
print(f"Doubled {count} times to reach {number}")Output:
Doubled 10 times to reach 10243. 反復が複雑な条件に依存するとき:
# プレイヤーの体力が減る簡単なゲームをシミュレートする
health = 100
turn = 0
while health > 0 and turn < 10:
damage = 15
health -= damage
turn += 1
print(f"Turn {turn}: Health = {health}")
if health <= 0:
print("Game over!")
else:
print("Survived 10 turns!")Output:
Turn 1: Health = 85
Turn 2: Health = 70
Turn 3: Health = 55
Turn 4: Health = 40
Turn 5: Health = 25
Turn 6: Health = 10
Turn 7: Health = -5
Game over!4. 反復ロジックをより細かく制御したいとき:
# 文字列を処理するが、連続する重複をスキップする
text = "bookkeeper"
index = 0
while index < len(text):
char = text[index]
print(char, end="")
# 連続する同一文字をスキップする
while index < len(text) and text[index] == char:
index += 1
print()Output:
bokeperwhile ループの重要な特徴は 不定反復(indefinite iteration) です。条件が偽になるまで続けますが、いつ偽になるかを事前に知らないことがあります。
12.6.3) for と while の変換
多くの問題は、どちらのループでも解けます。同じタスクを両方で実装した例です。
# for ループを使用: 1から10までの合計を求める
total = 0
for number in range(1, 11):
total += number
print(f"Sum (for loop): {total}")
# while ループを使用: 1から10までの合計を求める
total = 0
number = 1
while number <= 10:
total += number
number += 1
print(f"Sum (while loop): {total}")Output:
Sum (for loop): 55
Sum (while loop): 55どちらも同じ結果になりますが、for ループのほうが簡潔でミスが起こりにくいです。カウンタの増加を忘れるリスクがありません。どちらでもよい場合は for ループを優先しましょう。
ただし、while のほうが自然に表現できる問題もあります。
# 1000より大きい最初の2の累乗を見つける
power = 1
exponent = 0
while power <= 1000:
exponent += 1
power = 2 ** exponent
print(f"2^{exponent} = {power} (first power of 2 > 1000)")Output:
2^10 = 1024 (first power of 2 > 1000)この問題は、必要な反復回数を事前に知ることができないため for ループには自然に当てはまりません。条件を満たす値を探しています。
この章では、シーケンスを反復するための、すっきりして強力な方法を提供する Python の for ループについて探ってきました。range() がカウント処理のために数値シーケンスを生成する方法、break と continue でループの流れを制御する方法、そして for-else パターンが検索処理をエレガントに扱う方法を学びました。また、反復タスクの性質に基づいて for ループと while ループのどちらを選ぶべきかも確認しました。
for ループは Python の機能の中でも最も頻繁に使われるものの1つです。Python の学習を続ける中で、for ループは何度も登場します。ファイルからのデータ処理、リストや辞書の操作、情報のコレクションの変換などで、常に使うことになるでしょう。次の章では、値に基づいて別の判断を行う方法として Python の match 文を取り上げます。これは、ある種の問題において長い if-elif 連鎖に対する、より構造化された代替手段を提供します。