広告あり
[スポンサーリンク]

【Python】初心者でもわかる!繰り返し処理(for文・while文)徹底解説

Python

プログラミングにおいて同じ処理を何度も繰り返す「繰り返し処理」は必須のテクニックです。
Pythonではwhile文やfor文を中心に、多彩なループ構造が用意されています。
この記事では繰り返し処理の基本的な使い方から応用例、注意点までをわかりやすく解説します!

[スポンサーリンク]
[スポンサーリンク]

while文による繰り返し

while文は条件式が真(True)の間、ブロック内の処理を繰り返します。
主に「条件を満たすまでループを続けたい」場面で使用します。

count = 0
while count < 5:
    print(f"現在のcountは{count}です")
    count += 1
  • 条件式は毎回評価され、Falseになるとループが終了する
  • whileブロック内で条件を操作する場合は無限ループに注意!
    上記のような例では、count += 1のように必ず条件を変化させて、いずれ条件を満たすようにすることで回避します。
    ※基本的に、カウントアップする場合は次に説明するfor文を使用しましょう。

for文によるシーケンスの反復

for文はシーケンス(リストやタプル、文字列など)の各要素を1つずつ取り出して処理します。
Pythonicな書き方(Pythonらしい書き方)として推奨されるケースが多いです。

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(f"好きな果物は{fruit}です")
  • リストやタプル、文字列、辞書のキーなどに対応
  • インデックス操作不要で、可読性が高い

rangeを使った数値ループ

数値のシーケンスを生成するにはrangeが便利です。
range(start, stop, step)で開始値、終了値(未満で継続)、ステップ幅を指定できます。

for i in range(1, 10, 2):
    print(i)  # 1, 3, 5, 7, 9
  • range(stop)だけだと0からstop-1までのシーケンスを生成
  • Python 3ではrangeは遅延評価(実際に値が必要となるまで計算されない=無駄な処理が行われない)

enumerateでインデックスを同時取得

辞書などでシーケンスの要素とインデックスを同時に扱うにはenumerateが便利です。

names = ["Alice", "Bob", "Charlie"]
for idx, name in enumerate(names, start=1):
    print(idx, name)

# 1 Alice
# 2 Bob
# 3 Charlie
  • start引数でインデックスの開始値を指定可能
  • インデックス操作のミスを防ぐことができる

breakとcontinue

ループ中の処理をさらに制御したい場合、breakcontinueを使います。

  • break: ループを即座に終了
  • continue: 現在の繰り返しを中断(スキップ)して次のループへ
for n in range(10):
    if n == 5:
        break  # 5になったらループ終了
    if n % 2 == 0:
        continue  # 偶数はスキップ
    print(n)

# 1
# 3
  • 過度な使用は可読性低下の原因になるため注意が必要
  • 複雑なループには関数化を検討して可読性を保ちましょう

ループ内の else 節

Python特有の機能として、ループにelseを付けられます。
ループが通常終了(breakで中断せず終了)した場合にのみ実行されます。

for prime in range(2, 10):
    for div in range(2, prime):
        if prime % div == 0:
            print(f"{prime}は合成数")
            break
    else:
        print(f"{prime}は素数")
  • この例では、内側のforbreakを呼ばなかったときだけelseが動作する
  • 例外的な判定や後処理によく使用します

ネスト(入れ子)ループ

ループの中にさらにループを定義することで、二次元配列や表形式データを簡単に扱えます。
ただし、繰り返し回数が掛け算で増えていくため、パフォーマンスには十分注意しましょう。

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
]
for row in matrix:
    for val in row:
        print(val, end=" ")
    print() # 改行

# 1 2 3 
# 4 5 6
# 7 8 9
  • 大規模データではパフォーマンスに注意して必要であればアルゴリズムの見直しをしましょう
  • ジェネレータ式やitertoolsでメモリ効率を向上できます

リスト内包表記

ループを使ったリスト生成は、[]の中に記述するリスト内包表記で短く書くことができます。

squares = [x*2 for x in range(5)]
# 0~4までの2倍のリスト [0, 2, 4, 6, 8] になります
  • [...]でリスト内包表記
  • 一行で書けるため可読性が向上します
  • 複雑すぎる内包表記はむしろ読みにくくなり可読性が下がるので注意

注意点とベストプラクティス

  • ループ回数が多いと処理が重くなるため、アルゴリズムの計算量を意識する
  • 無限ループを避けるために終了条件を必ず書く
  • break/continueの多用を控え、複雑になる場合は関数化や早期リターンを検討
  • 大量データにはリストでなくジェネレータ式やitertoolsを使いメモリ効率を確保
  • 可読性を優先し、複雑なネストは分割して関数化

おわりに

Pythonの繰り返し処理は、シンプルなwhile文から高度な内包表記まで幅広くサポートしています。
適切なループ文を選び、可読性とパフォーマンスのバランスを意識することが重要です。
ぜひ今回紹介したテクニックを使いこなし、効率的で美しいコードを書いてみてください!

[スポンサーリンク]

\ おすすめ書籍 /



この記事を書いた人
だんご丸

鉄鋼系SE歴 10年
金融系SE歴  6年
現在は音楽出版社のSE

●保有資格
初級システムアドミニストレータ
(現:ITパスポート)
基本情報技術者
応用情報技術者
情報セキュリティスペシャリスト
(現:情報処理安全確保支援士)
ネットワークスペシャリスト
情報セキュリティマネジメント
AWS認定クラウドプラクティショナー
AWS認定ソリューションアーキテクト - アソシエイト

だんご丸をフォローする
Python
[スポンサーリンク]
だんご丸をフォローする
[スポンサーリンク]
タイトルとURLをコピーしました