Python 繰り返し構文(ループ)
繰り返し処理(ループ)は、定型作業を自動化し、特定のコードブロックを複数回実行することを可能にします。
大量のデータセットに対する反復処理、計算の繰り返し、あるいは動的でインタラクティブなプログラムの作成において、ループは不可欠なツールです。for 文 と while 文 をいかに効率的に使いこなすかが、シンプルでパフォーマンスの高い Python コードを書くための鍵となります。
1. for 文を理解する
for 文 は、シーケンス(リスト、タプル、文字列、range など)の各要素を順番に取り出し、その要素数分だけコードブロックを実行するために使用されます。
for 文の基本構文は以下の通りです。
for 変数 in シーケンス:
# 各要素に対して実行するコード- 変数 (Variable): ループの各イテレーション(反復)において、シーケンス内の現在の要素の値が代入される変数です。
- シーケンス (Sequence): 反復処理の対象となるデータの集合です。リスト、タプル、文字列、range オブジェクト、またはその他のイテラブル(反復可能)なオブジェクトが該当します。
- 実行コード: シーケンスの要素ごとに実行されるコードブロックです。ループの一部として認識されるためには、必ずインデント(字下げ)が必要です。
1.1 リストの反復処理
for 文の最も一般的な用途の一つは、リスト内の要素を順に処理することです。
# 例:フルーツのリストをループで処理する
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)この例では、for 文が fruits リストを走査します。各イテレーションにおいて、変数 fruit にリストの現在の要素が格納され、print(fruit) によって出力されます。
1.2 文字列の反復処理
文字列(String)も文字のシーケンスであるため、for 文を使って一文字ずつ取り出すことができます。
# 例:文字列を一文字ずつ処理する
message = "Hello"
for char in message:
print(char)この場合、変数 char には文字列内の各文字が順次代入され、出力されます。
1.3 range() 関数の活用
range() 関数 は for 文と組み合わせて使われることが多く、連続した数字のシーケンスを生成します。引数の数によって挙動が変わります。
range(stop): 0から始まり、stopの直前まで(stop自体は含まない)の数値を生成します。range(start, stop):startから始まり、stopの直前までの数値を生成します。range(start, stop, step):startからstopの直前まで、step刻みで数値を生成します。
# 例:range() を使って 0 から 4 まで出力
for i in range(5):
print(i)
# 例:range() を使って 2 から 5 まで出力
for i in range(2, 6):
print(i)
# 例:range() を使って 0 から 10 までの偶数を出力
for i in range(0, 11, 2):
print(i)1.4 ネスト(入れ子)された for 文
ある for 文の中に別の for 文を記述することを「ネスト(ネスト構造)」と呼びます。これは、行列やテーブルのような二次元データ構造を処理する際に非常に有効です。
# 例:ネストされた for 文で座標を出力
for i in range(3):
for j in range(2):
print(f"({i}, {j})")この例では、外側のループが実行されるたびに、内側のループが指定回数分(この場合は2回)完全に実行されます。結果として、(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1) という座標が順に出力されます。
2. while 文を理解する
while 文 は、特定の条件が True(真) である間、コードブロックを繰り返し実行します。基本構文は以下の通りです。
while 条件式:
# 条件が真である限り実行されるコード- 条件式 (Condition): 各イテレーションの開始前に評価されるブール式です。この条件が True であればブロックが実行され、False になるとループは終了します。
- 実行コード: 条件が成立している間に実行されるコードです。ここでも適切なインデントが必須です。
2.1 基礎的な while 文の例
# 例:while 文を使って 1 から 5 まで出力
count = 1
while count <= 5:
print(count)
count += 1この例では、count が 5 以下である限りループが継続します。ループ内で count += 1 (インクリメント)を行うことで、最終的に条件が False となり、ループが正常に終了するように制御しています。
2.2 ユーザー入力と while 文の組み合わせ
while 文は、ユーザーが特定の有効な値を入力するまで処理を繰り返すような、インタラクティブな処理によく使われます。
# 例:"quit" と入力されるまで入力を促し続ける
user_input = ""
while user_input != "quit":
user_input = input("コマンドを入力してください('quit' で終了):")
print(f"入力された内容: {user_input}")この例では、ユーザーが明示的に "quit" と入力しない限り、無限に入力プロンプトが表示され続けます。
2.3 無限ループの注意点
while 文の条件が常に True であり続けると、プログラムが終了しなくなる「無限ループ(死ループ)」に陥ります。開発時は必ず条件がいつか False になるようなロジックを含める必要があります。
# 例:無限ループ(これを実行してはいけません!)
# x = 1
# while x > 0:
# print("永遠に出力され続けます!")もし無限ループを強制停止させる必要がある場合は、ターミナル上で Ctrl+C を入力してプログラムを中断させてください。
3. for 文と while 文の使い分け
実際の開発において、どちらのループを選択すべきかの基準は以下の通りです。
for文を使用する場合: 反復回数が事前にわかっているとき(リストの全要素の走査や、固定範囲の数値処理など)。while文を使用する場合: 特定の条件が満たされるまで繰り返したいが、何回繰り返すかが事前には不明なとき(ユーザー入力待ち、センサーデータの監視など)。
| 特性 | for 文 | while 文 |
|---|---|---|
| 反復の仕組み | シーケンス(リスト、文字列等)を走査 | 条件式が False になるまで継続 |
| 反復回数 | 事前にわかっている | 事前に不明な場合がある |
| 主なユースケース | コレクションの処理、データセットの反復 | 特定条件の達成まで、状態の監視 |