Pythonのfor文:初心者向けガイド

JavaScriptを有効にしてください

前書き

for文はコード内で繰り返し処理を行う際に非常に重要な構文です。
この記事では、Pythonのfor文の基本的な使い方と、その応用例を初心者にも分かりやすく解説します。

for文の基本

Pythonのfor文は、シーケンス(リスト、タプル、文字列など)を反復処理するために使用されます。
基本的な構文は以下の通りです:

python
1
2
for 変数 in シーケンス:
    # 繰り返し実行されるブロック

ここで、変数はシーケンスの各要素に順番に代入され、その変数を使用して繰り返しブロック内の処理が実行されます。

例:リストの要素を反復処理する

python
1
2
3
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
実行結果
1
2
3
apple
banana
cherry

この例では、fruitsリストの各要素がfruit変数に代入され、その値がprint関数によって出力されます。

for文とrange関数

range関数と組み合わせることで、指定した回数だけ繰り返し処理を行うことができます。range関数は、数値のシーケンスを生成します。

例:0から4までの数値を出力する

python
1
2
for i in range(5):
    print(i)
実行結果
1
2
3
4
5
0
1
2
3
4

この例では、range(5)によって生成された0から4までの数値がi変数に代入され、その値が出力されます。

for文と辞書

Pythonの辞書をfor文で反復処理する場合、キー、値、またはその両方を取得することができます。

例:辞書のキーと値を出力する

python
1
2
3
person = {"名前": "山田太郎", "年齢": 30, "職業": "プログラマー"}
for key, value in person.items():
    print(f"{key}: {value}")
実行結果
1
2
3
名前: 山田太郎
年齢: 30
職業: プログラマー

この例では、person辞書の各アイテムに対して、キーと値がkeyvalue変数に代入され、それらが出力されます。

for文のネスト

for文はネスト(入れ子)することができ、これにより複数のシーケンスを同時に反復処理することが可能になります。

例:2次元リストの要素を出力する

python
1
2
3
4
5
6
7
8
9
matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

for row in matrix:
    for item in row:
        print(item)
実行結果
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9

この例では、matrixリストの各行がrow変数に代入され、その後、各行の要素がitem変数に代入されて出力されます。

breakステートメント

Pythonのbreakステートメントは、ループ(forループやwhileループなど)の実行中に、ループを途中で終了させるために使用されます。特定の条件が満たされた時点でこれ以上ループを続ける必要がない場合にbreakを使ってループから抜け出します。

forループを使用したbreakの基本的な使い方を以下の例で解説します。

例:特定の要素を見つけたらループを終了

リスト内の要素をループで検索し、特定の要素を見つけたらその時点でループを終了する例です。

python
1
2
3
4
5
6
fruits = ["apple", "banana", "cherry", "orange"]
for fruit in fruits:
    print(fruit)
    if fruit == "cherry":
        print("Cherry was found!")
        break  # cherryを見つけたらループを終了
実行結果
1
2
3
4
apple
banana
cherry
Cherry was found!

このコードでは、リストfruits内の要素を順に出力しています。ループ内でifステートメントを使用して各要素が"cherry"かどうかを確認し、“cherry"が見つかった場合にはメッセージを出力してbreakステートメントによりループから抜け出します。その結果、“cherry"以降の要素は処理されずにループが終了します。

breakを使うことで、不必要な処理を省略し、プログラムの効率を高めることができます。例えば、検索や特定の条件が満たされた時点での早期終了など、さまざまなシナリオで有用です。

forとwithを組み合わせたリソース管理のテクニック

Pythonでは、with 文を使うことでファイルやネットワークリソースなどの管理を自動化でき、リソースの解放を確実に行えます。さらに、この with 文の中で for ループ を使うことで、各行や各要素に対する処理をシンプルに記述できます。この記事では、実際のコード例を交えながら、withfor を組み合わせた使い方を紹介します。

基本的な使い方:ファイルの各行を処理する

最も一般的な使い方は、ファイル操作です。以下の例では、data.txt ファイルを with 文で開き、その中の各行を for ループで順番に処理しています。

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ファイル作成とテストデータの書き込み
with open('data.txt', 'w', encoding='utf-8') as file:
    file.write("これはテストデータです。\n")
    file.write("Pythonのwith文とfor文のサンプルコード。\n")
    file.write("3行目のデータです。\n")

# 作成したファイルを読み込み、各行を出力する
with open('data.txt', 'r', encoding='utf-8') as file:
    for line in file:
        print(line.strip())
実行結果
1
2
3
これはテストデータです。
Pythonのwith文とfor文のサンプルコード。
3行目のデータです。

ポイント

  • with
    ファイルを開いた後、ブロックを抜けると自動的にファイルが閉じられるため、明示的に file.close() を呼ぶ必要がありません。

  • for ループ
    ファイルオブジェクトはイテレータとして扱えるため、各行に対して簡単にループ処理が可能です。

複数のファイルを同時に扱う方法

Pythonの with 文では、複数のリソースを同時に管理することができます。例えば、2つのファイルを同時に開き、各行を同時に処理したい場合は、以下のように記述します。

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# file1.txt にテストデータを書き込む
with open('file1.txt', 'w', encoding='utf-8') as f1:
    f1.write("File1: 1行目のデータ\n")
    f1.write("File1: 2行目のデータ\n")
    f1.write("File1: 3行目のデータ\n")

# file2.txt にテストデータを書き込む
with open('file2.txt', 'w', encoding='utf-8') as f2:
    f2.write("File2: 1行目のデータ\n")
    f2.write("File2: 2行目のデータ\n")
    f2.write("File2: 3行目のデータ\n")

# 両ファイルを同時に読み込み、各行を出力する
with open('file1.txt', 'r', encoding='utf-8') as f1, \
     open('file2.txt', 'r', encoding='utf-8') as f2:
    for line1, line2 in zip(f1, f2):
        print(line1.strip(), line2.strip())
実行結果
1
2
3
File1: 1行目のデータ File2: 1行目のデータ
File1: 2行目のデータ File2: 2行目のデータ
File1: 3行目のデータ File2: 3行目のデータ

ポイント

  • 複数のコンテキストマネージャの同時利用
    コンマ区切りで複数の with 文を同時に書くことができ、各リソースはブロック終了時に自動で解放されます。

  • zip 関数との組み合わせ
    zip 関数を使うことで、2つのファイルから同時に行を取り出し、並行して処理することができます。
    zip 関数について詳しく知りたい方は下記記事をお読みください。
    Pythonのzip関数で複数のイテラブルを同時に操作しよう!

その他のfor文の例

Pythonのfor文は非常に汎用性が高く、様々なシナリオで利用できます。以下に、実用的な例を10個紹介します。

例1: リスト内の数値の合計

リスト内の全ての数値を合計する簡単な例です。

python
1
2
3
4
5
numbers = [1, 2, 3, 4, 5]
total = 0
for number in numbers:
    total += number
print("合計:", total)
実行結果
1
合計: 15

例2: 二次元リストの処理

二次元リスト(リストのリスト)を反復処理し、各要素を出力します。

python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

for row in matrix:
    for item in row:
        print(item, end=' ')
    print()  # 新しい行で出力
実行結果
1
2
3
1 2 3 
4 5 6 
7 8 9 

例3: リスト内包表記

リスト内包表記を使用して、特定の条件に一致する要素だけを新しいリストに含めます。この例では、偶数のみを抽出します。

python
1
2
3
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [number for number in numbers if number % 2 == 0]
print(even_numbers)
実行結果
1
[2, 4, 6, 8, 10]

リスト内砲表記については下記記事で詳しく解説しています。
Pythonのリスト内包表記:初心者向けガイド

例4: インデックスと共に反復処理

enumerate関数を使用して、リストの要素とそのインデックスを同時に取得します。

python
1
2
3
fruits = ["apple", "banana", "cherry"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")
実行結果
1
2
3
0: apple
1: banana
2: cherry

Pythonのenumerate関数は、イテラブル(リスト、タプル、文字列などを反復処理できるオブジェクト)を引数として受け取り、それを反復処理する際に、各要素にインデックス(位置)を付与して、インデックスと要素のペアを返します。これにより、イテラブルをループ処理する際に、要素の値だけでなく、その位置(インデックス)も同時に取得することができるようになります。

基本的な使い方は以下の通りです:

python
1
2
for index, value in enumerate(iterable, start=0):
    print(index, value)
  • iterableは反復処理されるイテラブルオブジェクトです。
  • startはインデックスの開始番号で、省略可能です。省略した場合のデフォルト値は0ですが、必要に応じて他の値から開始させることができます。

enumerate関数を使用することで、ループ内での要素のインデックスを手動で管理する必要がなくなり、コードがより簡潔で読みやすくなります。また、インデックスを使用して、反復処理中の要素に基づいて何らかの操作を行いたい場合にも便利です。

例5: 複数のリストを同時に反復処理

zip関数を使用して、複数のリストの要素を同時に反復処理します。この例では、名前と年齢のリストを同時に処理します。

python
1
2
3
4
names = ["John", "Jane", "Doe"]
ages = [23, 34, 45]
for name, age in zip(names, ages):
    print(f"{name}{age}歳です。")
実行結果
1
2
3
Johnは23歳です。
Janeは34歳です。
Doeは45歳です。

例6: 2次元リストのフラット化

2次元リストをフラット化(1次元リストに変換)します。

python
1
2
3
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [item for row in matrix for item in row]
print(flattened)
実行結果
1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

例7: 辞書のキーで反復処理

辞書のキーを反復処理し、それに対応する値を取得します。この方法は、辞書のキーに特に注目したい場合に便利です。

python
1
2
3
4
capitals = {"日本": "東京", "アメリカ": "ワシントンD.C.", "フランス": "パリ"}
for country in capitals:
    capital = capitals[country]
    print(f"{country}の首都は{capital}です。")
実行結果
1
2
3
日本の首都は東京です。
アメリカの首都はワシントンD.C.です。
フランスの首都はパリです。

まとめ

Pythonのfor文は、シーケンスの要素を反復処理するための強力なツールです。
リスト、タプル、文字列、辞書など、さまざまなデータ構造に対して繰り返し処理を行うことができます。
この記事を通じて、for文の基本的な使い方と応用例を理解し、Pythonプログラミングのスキルをさらに向上させることができるでしょう。
繰り返し処理はプログラミングにおいて非常に一般的なタスクであり、for文を効果的に使用することで、より効率的で読みやすいコードを書くことが可能になります。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア