【入門用】Pythonのfor文の書き方
for文は処理を繰り返すときに役に立ちます。同じ処理を何度も繰り返す場合は、for文を書くことで簡潔に記述可能です。
今回はPythonでのfor文の基本的な使い方を実際のコードとともに解説していきます。
Pythonのfor文~基本編~
初めに、Pythonにおけるfor文の基礎について解説していきます。繰り返し処理を記述する際の基本になるため、必ず押さえておきましょう。
Pythonのfor文の書き方
for文の構文は以下のように書きます。
for 変数 in データの集まり:
処理
Pythonのfor文は、VBAやC#等の他言語における「foreach文」にどことなく似ています。構成もよりシンプルになっているため、覚えやすく扱いやすいです。
簡単に構文の説明をすると、
- 「データの集まり」から一つずつデータを取り出す
- 取り出したデータに対して任意の「処理」をする
- 1~2を「データの集まり」分繰り返す
という流れになります。
「変数」「データの集まり」「処理」は任意に指定できます。Pythonのfor文で注意すべき点は、
- 「変数」直後の「in」
- 「データの集まり」直後の「:(コロン)」
どちらか片方でも抜けてしまうとエラーが発生するため、忘れないようにしましょう。
break-continue文
for文の繰り返し処理は基本的に全データに対して処理を実行します。しかし実際は、
- 特定のデータに特定の結果が出力され次第、以降のループ処理を一切実行せずループを終えたい
- 特定データの場合は処理をスキップし、直後のデータから処理を開始したい
という場合があります。
このような状況では1.は「break文」を2.は「continue文」を用いることで解決できます。
それぞれの書き方を見ていきましょう。
なお、break文とcontinue文はif文と組み合わせて使われることが多いです。
・break文
for 変数 in データの集まり:
ループを抜けたいときの条件
break
「ループ処理を抜けたい時の条件」をif文で記載し、if文の条件に合致した場合にbreakが実行される仕組みです。
breakが実行されれば、処理を終えていないデータが存在しようともループ処理を終わらせることができます。
・continue文
for 変数 in データの集まり:
処理をスキップしたいときのデータの条件
continue
こちらもbreak文と同様の構成です。処理を加えたくないデータに対して処理をスキップし、続くデータに対してループ処理を続行することができます。
for-else文
for文にはelseを組み合わせた使い方もできます。実際に構文を見てみましょう。
for 変数 in データの集まり:
処理1
else:
処理2
else文はfor文内の処理が全て終わった後で実行されます。
ただし、上記で紹介したbreak文で処理を途中終了した場合はelse文は実行されません。
次に使い方の一例を挙げてみます。
例:5教科の得点でどれか一つでも50点未満の場合は不合格とする
test_scores = [55, 70, 70, 60, 65]
for test_score in test_scores:
if test_score < 50:
break
else:
print(‘合格’)
簡単に解説します。
- test_scoresに格納した各教科の点数をfor文内で順に50点に達しているか否かを検証
- 50点未満の教科があれば、break処理によりループを途中終了。else文は未実行となり不合格と判定
- 全教科50点以上であればelse文が実行される
Pythonのfor文~応用編~
続いてfor文をより拡張的に使うために、これまでのfor文を応用してみましょう。
for文に関数を使用する
for文は様々な関数と組み合わせて使うことにより、難しい処理でも簡潔に緻密に記述することができます。
range()関数
for文は何度でも繰り返しすることができますが、例えば1000回も繰り返すことは時間がかかってしまいます。そこで役立つ関数が、range()関数です。
range()関数は指定した長さ、連続する整数のリストを自動生成してくれます。for文と組み合わせることで指定した任意の回数分ループすることができます。
for 変数 in range(始まりの数値, 最後の数値, 増加する量):
処理
rangeの引数は「最後の数値」のみ指定が必須ですが、その他2つの引数は省略ができます。
enumerate()関数
enumerate()関数は主に配列等のリストから「インデックス」と「インデックスに対応する要素」の2つを取り出すことができます。
通常のfor文ではインデックスを受け取ることはできないため、特定の状況で重宝します。
l = [‘Taro’, ‘Bob’, ‘Mika’]
for i, name in enumerate(l):
print(i, name)
# 実行結果
# 0 Taro
# 1 Bob
# 2 Mika
for文の変数iと変数nameは、enumerate関数による変数lをそれぞれ代入した形です。
実行するとリストのインデックスと対応する要素の組み合わせが出力されます。
zip()関数
zip()関数は配列等のリストの要素をまとめることができる関数です。
for文と組み合わせることにより、複数の要素を取り出すことができます。
names = [‘Taro’, ‘Bob’, ‘Mika’]
ages = [18, 20, 21]
for name, age in zip(names, ages):
print(name, age)
# 実行結果
# Taro 18
# Bob 20
# Mika 21
対象のリストが3つ以上でも同様に出力できますので、組み合わせ次第で様々な結果を得ることができます。
リスト内包表記で記述量削減
Pythonのfor文にはリスト内包表記という記述方法があります。
通常のfor文では「データの集まり」を宣言し、for文の中で呼び出す必要がありました。
しかし、リスト内包表記を用いることで、いちいち呼び出す必要がなくなり、とてもシンプルな記述が可能になります。
リスト内包表記の書き方
リスト内包表記の書き方は以下のように記述します。
[式 for 変数 in データの集まり]
「式」「変数」「データの集まり」に値を入れ出力すると以下のようになります。
multiplication = [i * 2 for i in [0, 1, 4, 8, 10]]
print(multiplication)
# 0
# 2
# 8
# 16
# 20
リストに格納された数値をそれぞれ2倍して出力した結果です。
1行でfor文とリストの機能を果たしています。
このようにリスト内包表記を用いれば、コードがシンプルになり処理もわかりやすくなるため、積極的に活用しましょう。