当ブログのコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性を保証するものではありません。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますので、予めご了承ください。
【Pythonのfor文徹底解説】初心者~中級者向け
Pythonのfor
文は非常に強力なツールで、初心者がプログラミングを学び始める際に必ず習得すべきものです。
この記事では、Pythonのfor
文を使ってどのようなことができるのかを詳しく解説します。for
文をマスターすれば、様々な反復処理を簡単に実装できるようになり、プログラミングの幅が大きく広がるでしょう。
for文の基本
for
文は、Pythonにおける繰り返し処理(反復処理)を実行するための制御構造です。イテラブルオブジェクトと呼ばれるものを順に取り出して処理することができます。
イテラブルオブジェクトとは、Pythonにおいて一つずつ順番に要素を取り出して処理できるオブジェクトのことです。具体的には、リスト(list)やタプル(tuple)、集合(set)、文字列(str)、辞書(dict)、といったデータ型、そしてrange()
関数が返すオブジェクトなどが該当します。
for
文の基本構文
for
文の基本的な構文は以下の通りです。ここでは、変数がイテラブルオブジェクトの各要素を順に受け取り、その要素に対して指定された処理を実行します。
for 変数 in イテラブルオブジェクト:
処理
for文の使い方
リスト型、タプル型、セット型への反復処理
for
文を使って、リスト型やタプル型、セット型の要素をループ処理することができます。
例えば、以下のコードはリスト内のフルーツ名を順に出力します。
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit) # 出力結果: apple, banana, cherry
同様に、タプル型にも反復処理を行うことができます。タプルはリストと似ていますが、不変(変更不可)である点が異なります。以下のコードは、タプル内の動物名を順に出力します。
animals = ('cat', 'dog', 'rabbit')
for animal in animals:
print(animal) # 出力結果: cat, dog, rabbit
さらに、セット型のデータにも反復処理を適用できます。次のコードは、セット内の色を出力します。セット型では要素の順序が保証されていないため、出力される順序はコードを実行するたびに異なりますが、すべての要素が一度だけ出力されます。
colors = {'red', 'green', 'blue'}
for color in colors:
print(color) # 出力結果: green, red, blue(順不同)
文字列型への反復処理
for
文は文字列型にも使うことができます。このコードでは、文字列 "hello" の各文字が順に出力されます。for
文を使えば、文字列の各文字に対して操作を行うことができます。
text = "hello"
for char in text:
print(char) # 出力結果: h, e, l, l, o
辞書型のキーや値の反復処理
for
文では、辞書のキーや値も反復処理できます。以下の例では、名前と年齢を持つ辞書を処理し、それぞれの値を出力しています。このコードでは、辞書のキー(name
)と値(age
)をそれぞれ取り出して処理しています。
ages = {'Alice': 25, 'Bob': 30, 'Charlie': 35}
for name, age in ages.items():
print(f"{name} is {age} years old") # 出力結果: Alice is 25 years old, Bob is 30 years old, Charlie is 35 years old
range()
関数で数値の範囲を反復処理
range()
関数を使うことで、特定の範囲内の数値を順に処理することができます。以下のコードは、0から4までの数値を順に出力します。
for i in range(5):
print(i) # 出力結果: 0, 1, 2, 3, 4
for
文の動作制御(continue
とbreak
)
for
文では、continue
やbreak
を使ってループの制御を細かく行うことができます。continue
やbreak
を適切に使うことで、柔軟なループ制御が可能になります。
以下のコードでは、range()
関数で0から9の数値を生成しますが、continue
によって偶数をスキップし、break
によって5に達したらループを終了します。結果として1と3のみが出力されます。
for num in range(10):
if num % 2 == 0:
continue # 偶数はスキップ
if num == 5:
break # 5に到達したらループを終了
print(num) # 出力結果: 1, 3
if
文で条件付きの反復処理
for
文内でif
文を使えば、特定の条件を満たす要素だけを処理することができます。以下の例では、リストの中から偶数のみを判別して出力します。
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
print(f"{num} is even") # 出力結果: 2 is even, 4 is even
else
文との併用
for
文はelse
文と併用することができます。else
ブロックは、for
ループが正常に完了した場合(break
で中断されなかった場合)に実行されます。
このコードでは、ループ内で10が見つからずbreak
で中断されなかったため、else
ブロックが実行され「10 was not found」と出力されます。
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num == 10:
print("Found 10!")
break
else:
print("10 was not found") # 出力結果: 10 was not found
リスト型やタプル型の要素を操作
for
文を使って、リストの要素を操作することができます。以下の例では、リストの各要素を2倍にしています。
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers)):
numbers[i] = numbers[i] * 2
print(numbers) # 出力結果: [2, 4, 6, 8, 10]
ネストした反復処理
for
文はネストして使うことができ、二重ループや三重ループが可能です。例えば、2次元リストを操作することができます。
このコードでは、2次元リストのすべての要素を出力します。
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for num in row:
print(num, end=' ') # 出力結果: 1 2 3 4 5 6 7 8 9
print()
反復処理でのリスト内包表記
リスト内包表記を使えば、簡潔なコードでリストを生成することができます。以下の例では、0から9までの数値の平方を計算し、新しいリストを生成します。
squares = [x**2 for x in range(10)]
print(squares) # 出力結果: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
リスト内包表記は、リストの生成を効率的に行うための強力なツールです。
reversed()
関数を使った逆順ループ
reversed()
関数を使うと、リストや文字列を逆順に処理することができます。
このコードは、リストnumbers
の要素を逆順に出力します。
# reversed()を使った逆順ループ
numbers = [1, 2, 3, 4, 5]
for number in reversed(numbers):
print(number) # 出力結果: 5, 4, 3, 2, 1
zip()
関数で複数のイテラブルを同時に反復処理
zip()
関数を使えば、複数のリストやタプルを同時に反復処理できます。
以下の例では、名前と点数のリストを同時に処理しています。zip()
関数は複数のイテラブルを一度に処理するのに便利です。
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 90, 95]
for name, score in zip(names, scores):
print(f"{name} scored {score}") # 出力結果: Alice scored 85, Bob scored 90, Charlie scored 95
enumerate()
関数でインデックスと要素を同時に取得
enumerate()
関数を使えば反復処理時に要素のインデックスと要素自体を同時に取得できます。
例えば、リストの要素とそのインデックスを表示するには以下のようにします。このように、リストの要素とその位置を同時に処理することができます。
for index, value in enumerate(['a', 'b', 'c']):
print(f"Index: {index}, Value: {value}") # 出力結果: Index: 0, Value: a, Index: 1, Value: b, Index: 2, Value: c
zip()
関数とenumerate()
関数の併用
enumerate()
とzip()
を併用すると、複数のリストを同時に反復処理しながら、各要素のインデックスも取得できます。以下の例では、名前、点数、およびインデックスを同時に処理しています。
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 90, 95]
for index, (name, score) in enumerate(zip(names, scores)):
print(f"Index: {index}, {name} scored {score}") # 出力結果: Index: 0, Alice scored 85, Index: 1, Bob scored 90, Index: 2, Charlie scored 95
この方法で、リスト内の要素をインデックスとともに処理することができます。
itertools.product()
関数を使った全組み合わせの生成
itertools.product()
を使うと、複数のリストやタプルの全ての組み合わせを生成することができます。例えば、2つのリストから全ての組み合わせを生成するには以下のようにします。
このコードでは、全ての色とサイズの組み合わせを生成して出力しています。itertools.product()
は、全ての組み合わせを試す必要がある場合に非常に有用です。
import itertools
colors = ['red', 'green']
sizes = ['S', 'M', 'L']
for combination in itertools.product(colors, sizes):
print(combination) # 出力結果: ('red', 'S'), ('red', 'M'), ('red', 'L'), ('green', 'S'), ('green', 'M'), ('green', 'L')
テキストファイルの行を一行ずつ処理
ファイルを開いて、その内容を一行ずつ処理するのもfor
文の用途の一つです。以下のコードは、テキストファイルを読み込み、その内容を一行ずつ出力します。
with open('example.txt') as file:
for line in file:
print(line.strip()) # 出力結果: (ファイル内の各行の内容が出力されます)
フォルダ内の複数のファイルを連続処理
フォルダ内にある複数のファイルを一つずつ開き、各ファイルの内容を処理することもfor
文で簡単に実行できます。
このコードでは、指定したフォルダ内のすべてのテキストファイルに対して、ファイルの内容を一行ずつ出力しています。ファイルやフォルダを操作する"os"モジュールのos.listdir()
を使用してフォルダ内のファイル一覧を取得し、各ファイルをfor
文で順番に処理しています。
import os # osモジュールをインポート
folder_path = '/path/to/your/folder'
for filename in os.listdir(folder_path):
if filename.endswith('.txt'):
file_path = os.path.join(folder_path, filename)
with open(file_path) as file:
print(f"--- {filename} の内容 ---")
for line in file:
print(line.strip()) # 出力結果: (各ファイル内の行が出力されます)
まとめ
Pythonのfor
文は、繰り返し処理を実行するための強力なツールです。リストやタプル、辞書、ファイルの行、数値の範囲など、さまざまなデータ構造に対して適用できます。
また、ネストしたループや条件付きの反復処理、リスト内包表記を使った効率的なリスト生成など、多くの応用が可能です。この記事で紹介したさまざまなfor
文の使い方をマスターすれば、Pythonでのプログラミングがより強力で柔軟なものになるでしょう。