入門Pythonの「for文」を徹底解説! 基本の書き方・便利な関数・Tips

公開日:2021.05.31

スキルアップ
 

今回は、Pythonで繰り返し処理をしたいときに便利なfor文の使い方について、1から分かりやすく解説していきます。基本的な使い方を最初に説明しますので、基礎的な文法を確認しましょう。その後、組み合わせて使うと便利な関数と、for文に関連するリスト内包表記などのTips集を順番に解説していきます。Pythonの学習に、ぜひ本記事の内容をお役立てください。

Pythonのfor文:基本編

まずは、Pythonのfor文について、基本的な構文と書き方を紹介します。繰り返し処理を中断してfor文の次の処理に進む方法や、for文内の処理を飛ばして次の繰り返し処理を進める方法についても確認しましょう。

for文の基本的な書式と具体例(配列)

for文の基本的な書式は、以下の通りです。


【for文の書式】
for 変数 in イテラブルオブジェクト:
    実行する処理1
    実行する処理2
    実行する処理3

イテラブルオブジェクトとは、文字列、リスト、タプルなどのように要素を順番に取り出せるオブジェクトです。イテラブルオブジェクトから順番に取り出した要素を変数に入れて、その変数を使って処理を実行します。

では、リストをイテラブルオブジェクトに使った具体的なサンプルコード例を見てみましょう。


【サンプルコード】
catkindlist = ["Mike", "Sabi", "Chatora"]
for val in catkindlist:
    print(val)
print("End")
【実行結果】
>>Mike
>>Sabi
>>Chatora
>>End

このコードは、catkindlistというリストを定義し、そのリストの要素をvalに取り出してプリントし、要素がなくなったら最後に"End"を出力します。

break:for文を途中で終わりにして次の処理にすすむ

条件によっては、途中で繰り返し処理を終了したいケースがあります。そのような場合に使えるのがbreakです。書式は以下の通りです。


【breakの書式】
for 変数 in イテラブルオブジェクト:
    実行する処理1
    条件式
        break
    実行する処理2
    実行する処理3
実行する処理4

条件式に当てはまらない場合は、処理1、2、3をイテラブルオブジェクトの個数分繰り返した後、処理4に進みます。条件式に当てはまる場合は、その時点で処理を終わり、for文を抜けて処理4に進みます。breakを使ったサンプルコードと実行例は、以下の通りです。


【サンプルコード】
catkindlist = ["Mike", "Sabi", "Chatora"]
for val in catkindlist:
    if val == "Sabi"
        break
    print(val)
print("End")
【実行結果】
>>Mike
>>End

1つ目の要素は、if条件式に当てはまらないので、print(val)を実行。2つ目の要素は、if条件式に当てはまるため、breakが実行され、for文の次の処理となるprint("End")を実行します。

continue:特定の処理をスキップして次のfor文に進む

continueは、以降の処理を省略して、次の繰り返し処理を進めたいときに使います。書式は以下の通りです。


【continueの書式】
for 変数 in イテラブルオブジェクト:
    実行する処理1
    条件式
        continue
    実行する処理2
    実行する処理3
実行する処理4

条件式に当てはまらない場合は、処理1、2、3をイテラブルオブジェクトの個数分繰り返した後、処理4に進みます。条件式に当てはまる場合は、その時点で処理を中断して、次の要素のfor文を続けます。continueを使ったサンプルコードと実行例は、以下の通りです。


【サンプルコード】
catkindlist = ["Mike", "Sabi", "Chatora"]
for val in catkindlist:
    if val == "Sabi"
        continue
    print(val)
print("End")
【実行結果】
>>Mike
>>Chatora
>>End

1つ目の要素は、if条件式に当てはまらないので、print(val)を実行。2つ目の要素はif条件式に当てはまるため、continueが実行され、3つ目の要素の処理に進みprint(val)を実行します。

結果として、2つ目の要素のみprint(val)処理が飛ばされ、"Sabi"のみ出力されない実行結果となります。

else:for文終了直後に行う処理を記載

elseは、for文終了直後に行う処理を記載する場合に使用します。基本的な書式は、以下の通りです。


【for elseの書式】
for 変数 in イテラブルオブジェクト:
    実行する処理1
    実行する処理2
else:
    実行する処理3
実行する処理4

「elseを使わなくてもfor文の続きで処理を書けばいいのでは?」と感じる方もいるかもしれません。しかし、break文を使うと挙動が変わる点に注意してください。for文の中でbreakが実行されると、elseの処理は行われません。

for文の次の処理(書式例の場合なら処理3が飛ばされ処理4に進む)に進みます。elseを使ったサンプルコードと実行例は、以下の通りです。


【サンプルコード】
catkindlist = ["Mike", "Sabi", "Chatora"]
for val in catkindlist:
    if val == "Sabi"
        break
    print(val)
else:
    print("End")
print("!")
【実行結果】
>>Mike
>>!

1つ目の要素は、if条件式に当てはまらないので、print(val)を実行。2つ目の要素はif条件式に当てはまるためbreakが実行され、elseの処理は実行されずに、for文の外にあるprint("!")が実行されます。


【サンプルコード】
catkindlist = ["Mike", "Sabi", "Chatora"]
for val in catkindlist:
    if val == "Kuro"
        break
    print(val)
else:
    print("End")
print("!")
【実行結果】
>>Mike
>>Sabi
>>Chatora
>> End
>>!

上記のサンプルコードの場合、途中break処理に進むことはないため、3つの要素すべてが出力された後、Endと!も出力される結果となります。

Pythonのfor文:組み合わせると便利な関数

ここでは、python for文と組み合わせて使うと便利な関数を3つ紹介します。

range関数:カウンタとして使える

ここまでは、for文の繰り返す回数は、イテラブルオブジェクトの要素数で指定していましたが、単純に「10回」などといった数字で指定することも可能です。この場合は、range関数を使いましょう。


【range関数を使ったfor文の書式】
# 0 ≦ i < stopの連番を返す
for 変数 in range(stop):
    実行する処理

# start ≦ i < stopの連番を返す
for 変数 in range(start, stop):
    実行する処理

# start ≦ i < stopの範囲でstepごとの整数値を返す
for 変数 in range(start, stop, step):
    実行する処理

range関数は、引数の指定によって、単なる連番にしたり値の範囲を指定してその範囲内の連番にしたりする使い方が可能です。書式で紹介したrange関数の書式を利用したfor文のサンプルコードを以下に示します。


【0 ≦ i < stopの連番を利用したサンプルコード】
for num in range(3):
    print(val)
print("End")

【実行結果】
>>0
>>1
>>2
>>End


【start ≦ i < stopの連番を利用したサンプルコード】
for num in range(3, 6):
    print(val)
print("End")

【実行結果】
>>3
>>4
>>5
>>End


【start ≦ i < stopの範囲でstepごとの整数値を利用したサンプルコード】
for num in range(0.9.2):
    print(val)
print("End")

【実行結果】
>>0
>>2
>>4
>>6
>>8
>>End

range関数は、for文とセットで使う機会の多い関数なので、使い方を覚えておきましょう。

zip関数:複数のリストをセットで扱える

複数のイテラブルオブジェクト(リストなど)をセットで扱えるzip関数も、覚えておくと便利な関数です。セットで同じサイズのリストを作ってfor文で処理を進められます。


【zip関数を使ったfor文の書式】
1番目のイテラブルオブジェクト定義
2番目のイテラブルオブジェクト定義

for 変数1, 変数2 in zip(1番目のイテラブルオブジェクト, 2番目のイテラブルオブジェクト定義):
    実行する処理

以下は、zip関数を使って3つのリストをfor文内でまとめて処理するサンプルコードです。


【zip関数を使ったfor文のサンプルコード】
colors = ["Mike", "Sabi", "Chatora"]
names = ["Yuzu", "Jyuri", "Pon"]
ages = [9, 7, 8]

【実行結果】
for name, age in zip(colors, names, ages):
    print(colors, names, ages)
>>Mike Yuzu 9
>>Sabi Jyuri 7
>>Chatora Pon 8

zip関数で扱うイテラブルオブジェクトの要素数が違う場合は、自動的に一番要素数の少ないイテラブルオブジェクトに合わせて処理が終了します。要素の数を意識したくない場合には、とても便利です。

reversed関数:後ろから要素を取得できる(逆順)

reversed関数を使うと、イテラブルオブジェクトの要素を後ろから順番に取得できます。書式は、以下の通りです。


【for文の書式】
for 変数 in reversed(イテラブルオブジェクト):
    実行する処理1
    実行する処理2
    実行する処理3

reversed関数を使ったfor文のサンプルコードと実行結果は、以下の通りです。


【サンプルコード】
catkindlist = ["Mike", "Sabi", "Chatora"]
for val in reversed(catkindlist):
    print(val)
print("End")

【実行結果】
>>Chatora
>>Sabi
>>Mike
>>End

実行すると、リストの逆順から要素を取得して出力する結果となります。

Pythonのfor文:知っておきたいTips集

ここからは、Pythonのfor文を使う上で知っておくと便利なTipsを紹介します。

リスト内包表記:for文の代わりに使って1行で記述

イテラブルオブジェクトの要素を処理して新たなリストを生成する場合は、for文よりも1行でシンプルに表記できるリスト内包表記がおすすめ。リスト内包表記の書式は、以下の通りです。


【リスト内包表記の書式】
[式 for 変数 in イテラブルオブジェクト]

それでは、リスト内包表記のサンプルコードを、リスト内包表記を使わずfor文で表現したサンプルコードとともに紹介します。


【リスト内包表記のサンプルコード】
#0~4の2乗の数値をリスト化してprint処理を行う
print(squares = [i**2 for i in range(5)])
【実行結果】
>>[0, 1, 4, 9, 16]

【リスト内包表記と等価のfor文】
squares = []
for i in range(5):
    squares.append(i**2)
print(squares)
【実行結果】
>>[0, 1, 4, 9, 16]

リスト内包表記のメリットは、処理を1行にすることで、インデント間違いによるバグ作りこみを防げる点です。

for文で値を保存する方法

for文内で特定の値を保存する場合は、基本的に保存用の変数を定義して、その変数に格納します。リストのインデックスと値を同時に取得して、実行結果のイテラブルオブジェクトに格納していくサンプルコード例を紹介します。


【for文で値を保存するサンプルコード】
# 検査対象のイテラブルオブジェクト定義
numlist = [1, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7]

# numlistから取り出した偶数のインデクスと値のセットを格納する変数の定義
results = []

# 偶数を取り出して表示 (index も)

for i in range(len(numlist)):
    v  = numlist[i]
    if v % 2 == 0:
        results.append([i, numlist [i]])
print(results)

【実行結果】
>>[[3,2], [6,4], [7,4], [8,4], [12,6], [13,6], [14,6]]


【for文で値を保存する方法のその他の処理例】
numlist = [1, 1, 1, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7]
results = []

# リスト内包表記での記載方法
results = [[i, numlist [i]] for i in range(len(numlist)) if numlist [i] % 2 == 0]
print(results)

# enumerate関数でインデクスと値を同時に取り出す方法
results = [[i, v] for i, v in enumerate(numlist) if v % 2 == 0]
print(results)

ここでは、シンプルにfor文を使って処理する例をベースに、リスト内包表記、イテラブルオブジェクトのインデクスと値を同時に取得できるenumerate関数を使う方法も紹介しました。どのサンプルコードを使っても、同じ実行結果となります。

Pythonの学習にAKKODiS Academyも活用を

ここで紹介したPythonのfor文の使い方は、いずれも基本的な内容です。breakやcontinue、elseの挙動は、細かい部分で勘違いすることもあるため、特に注意して覚えましょう。これらの内容が難しく感じる場合は、AKKODiS(派遣・紹介予定派遣)別ウィンドウで開くAKKODiS Academy別ウィンドウで開くのPython講座もぜひご活用ください。

AKKODiS Academy:https://www.akkodis.co.jp/talent/career/mta別ウィンドウで開く

また、AKKODiSのお役立ち情報にはPythonの関連記事もありますので、ぜひ本記事と併せてご覧ください。

【関連記事】

Pythonをマスターしたら、AKKODiSのエンジニア派遣の求人も活用して、実務経験を積んでいきましょう。AKKODiSは、開発言語にPythonを指定した派遣エンジニアの求人も多く掲載しているためぜひご確認ください。

(2021年5月現在)

AKKODiSコンサルティングに関するお問い合わせ