【完全網羅】pythonのfor文(forループ)使い方まとめ
2019.06.30
for文(forループ)は繰り返し処理をする際に用いられ、この処理を反復処理と言います。
繰り返し処理といえば、for文の他にwhile文もありますが、両者の違いをまとめると次のようになります。
- for文:簡単な計算処理に向いている。
- while文:複雑な計算処理に向いている。
さらに、for文とまつわる様々な関数、また状況によってはfor文よりもオススメな関数をいくつかご紹介します。
for文を網羅しましたので、ぜひpythonのfor文ライフに活用してください。
pythonのfor文とは
for文は繰り返し処理に優れており、下記が基本的な書き方になります。
python
# for文の基本的な書き方
for 変数 in データの集まり:
処理
for文は、「データの集まり」から「データを1つずつ取り出す」という処理が基本になります。
例えば、「Nakazawa(データの集まり)」から「1単語ずつ書く(データを1つずつ取り出す)」場合、次のようなコードになります。
python
# Nakazawaというデータをfor文で指定
for name in 'Nakazawa':
# 変数 name を用いて、Nakazawaを出力
print(name)
# 出力結果
# N
# a
# k
# a
# z
# a
# w
# a
もちろん、「Nakazawa」を1文字ずつ出力することは金輪際ないと思いますが、「データの集まり」から「データを1つずつ取り出す」という意味が理解できたかと思います。
fpr文の基本的な知識
for文と一緒に用いると便利な文がいくつかあります。
その中でも、使用頻度が高い4つを取り上げてお伝えします。
【if-else文】ループ処理に条件分岐をつける
ループ処理の途中で、条件によっては出力する要素を変えたり、またはループ処理を終了させることがあります。
条件によって分岐を帰る際に用いる文が「if-else文」です。
例えば、取得した値が偶数の場合は「偶数です」と出力し、取得した値が奇数の場合は「奇数です」と出力したい場合、「if-else文」を用いると次のようになります。
python
# 1から5までの範囲
for i in range(1, 6):
# 変数iの要素を2で割ると、余りが0の場合
if(i % 2 == 0):
print(str(i) + "は偶数です")
# 上記以外
else:
print(str(i) + "は奇数です")
# 出力結果
# 1は奇数です
# 2は偶数です
# 3は奇数です
# 4は偶数です
# 5は奇数です
変数iの値が偶数の場合は「偶数です」と出力し、奇数の場合は「奇数です」と出力しいることがわかると思います。
【break文】ループ処理を終了させる
for文のループ処理を強制終了させることができるbreak文というものがあります。
例えば、1から5の数字を出力するループ処理に、break文を記述すると次のようになります。
python
for i in range(1, 6):
print(i)
# breakで強制終了
break
# 出力結果
# 1
本来、出力結果には1から5の数字が出力されるのですが、break文を用いると、1の値を出力した後、ループ処理が終了します。
さらに、break文はif文と一緒に使うと効果的で、例えば上記のコードで「変数iの値が4の場合、ループ処理を終了させる」という処理をする場合は次のようになります。
for i in range(1, 6):
if i == 4:
break
print(i)
# 出力結果
# 1
# 2
# 3
# 4
if文とbreak文を使うと、for文の幅が格段に広がるので覚えておきましょう。
【continue文】処理をスキップさせる
continueは処理をスキップすることができます。
実際のコードで見た方が早いので、早速見ていきます。
python
for i in range(1, 6):
if i == 4:
continue
print(i)
# 出力結果
# 1
# 2
# 3
# 5
continueを用いたことで、変数iの値が4だけスキップされ、その後変数iの5が出力されているのがわかると思います。
僕はcontinue文を実際に使ったことがないですが、for文の説明には必ず記載されているので、一応書いておきました。
様々な関数を用いたfor文
より複雑なfor文を書く際に非常に便利な関数をご紹介します。
全て覚える必要はないですが、必要な時に「こんな関数あったような」と思い出せるように、頭の片隅に置いておきましょう。
【range関数】範囲を指定できる
非常に便利な関数で、範囲を指定することができます。
例えば、4から10の値を出力したい場合、range関数を用いると次のようになります。
python
for i in range(4, 11):
print(i)
i += 1
# 出力結果
# 4
# 5
# 6
# 7
# 8
# 9
# 10
【enumerate関数】インデックス番号と要素を取得できる
for文は、通常「要素のみ」を取得しますが、enumerate関数はインデックス番号も一緒に取得できます。
enumerate関数を用いると次のようなコードになります。
python
animals = ['dog', 'cat', 'bird', 'tiger', 'lion']
for i, name in enumerate(animals):
print(i, name)
# 出力結果
# 0 dog
# 1 cat
# 2 bird
# 3 tiger
# 4 lion
要素と一緒に、インデックス番号も出力されていることがわかると思います。
【zip関数】複数のリストやタプルから同時に取得する
こちらも非常に便利な関数で、異なるリストから同時に取得することができます。
例えば、「年齢のリスト」と「名前のリスト」を同時に取得したい場合は次のようになります。
python
names = ['miku', 'mari', 'rinon']
ages = ['20', '30', '40']
for name, age in zip(names, ages):
print(name, age)
# 出力結果
# miku 20
# mari 30
# rinon 40
namesリストとagesリストが同時に出力されていると思います。
[link url=”https://nakazawakan.com/python-zip/”]
【reversed関数】反対の順番に出力する
リバースという意味でわかる通り、要素が逆の順番で出力されます。
実際のコードがこちらです。
python
num = [1, 2, 3, 4, 5]
for i in reversed(num):
print(i)
# 出力結果
# 5
# 4
# 3
# 2
# 1
numリストの要素を、最後から出力していることがわかると思います。
【itertools・product関数】複数のリストやタプルから全ての組み合わせを出力
複数のリストの要素から、全ての組み合わせを出力します。
「mensリスト」と「womensリスト」から、全ての組み合わせで結婚させてみました。
python
mens = ['kan', 'takumi', 'yuta', 'koki']
womens = ['miku', 'mari', 'rinon']
for men, women in itertools.product(mens, womens):
print(men + "と" + women + "は結婚しました")
# 出力結果
# kanとmikuは結婚しました
# kanとmariは結婚しました
# kanとrinonは結婚しました
# takumiとmikuは結婚しました
# takumiとmariは結婚しました
# takumiとrinonは結婚しました
# yutaとmikuは結婚しました
# yutaとmariは結婚しました
# yutaとrinonは結婚しました
# kokiとmikuは結婚しました
# kokiとmariは結婚しました
# kokiとrinonは結婚しました
なかなか実用的な関数ですね。
for文まとめ
同じ処理をするにしても、プログラミングでは様々な書き方をすることができます。
ただし、慣れるまではfor文でほとんどの処理ができると言っても過言ではないほど、非常に便利な関数です。
実際に僕も、最初の頃はfor文を使い倒していました。
より綺麗なコードを書いた方がエラーが少なく処理速度も速いのですが、最初のうちは特に気にせずfor文マスターを目指しましょう。