Python入門 for文の書き方を網羅!初学者向けに丁寧に解説しています!

Python

Pythonの基本構文である「 Pythonのfor文 」に関して、現役エンジニアである筆者が解説いたします。分かりやすく説明できるように心がけ、理解を助ける図解を用いて説明しました。

この記事を読めば、Pythonのループ処理 for文 を網羅している内容を学べると思います。下記目次から該当の項目に飛べます!

  1. ループ文である「 for文 」の使い方
        1. 「 for文 」とは何か??
        2. for文の書き方
  2. 様々なfor文の使い方
        1. for文の出力を途中で止めたい場合に使用する「 break 」
        2. for文の出力を任意の出力をスキップさせたい「 continue 」
        3. for文のループが終了後に処理をさせたい「 else 」
        4. for文で指定した範囲の整数を順番に取得したい「 range() 」
          1. 単純な出力
          2. 引数を指定して出力する
        5. for文でリスト、タプルの範囲を指定して一部の要素を取り出したい「スライス」
          1. インデックス番号の説明
          2. リストの要素をスライスで指定して取り出す
          3. タプルの要素をスライスで指定して取り出す
        6. for文でリスト、タプルに対して、インデックス番号と要素のペアを返す「 enumerate() 」
          1. リストで出力した例
          2. タプルでインデックス番号を指定して出力した例
        7. for文で複数のリストなど(イテラブルオブジェクト)の要素を同時に処理する「 zip() 」
          1. リストを同時に処理する
          2. 辞書のキーと値を同時に処理する
        8. for文で「 zip() 」と「 enumerate() を組み合わせて出力する
        9. for文で「 reversed() 」を使用して逆順で出力する
        10. for文の多重ループと多重ループさせる標準ライブラリ「 itertools.product() 」
        11. for文で辞書の操作
          1. 辞書のキーを取り出す
          2. 辞書のバリュー部分を取り出す「 values() 」
          3. 辞書のキーとバリューを出力する「 items() 」

ループ文である「 for文 」の使い方

「 for文 」とは何か??

「 for文 」はループ文と呼ばれる構文で、変数に入っている複数の値を一つ一つ取り出したいときに使用するテクニックです。例えば、「 list 」を用いて説明します。

もともと、「 list 」でも全ての要素を取り出すことは可能ですが、「 for文 」で取り出す場合との違いも合わせて見ていきましょう。

Python
weekly_book = ["週間少年ジャンプ", "週間少年サンデー", "週間少年マガジン"]
# weekly_bookの中に入っている要素を全て出力
print(weekly_book)

print("-----------------------")

weekly_book = ["週間少年ジャンプ", "週間少年サンデー", "週間少年マガジン"]
# for文を使用して要素の中を一つ一つ取り出す
for w_book in weekly_book:
    print(w_book)
# 実行結果
['週間少年ジャンプ', '週間少年サンデー', '週間少年マガジン']
-----------------------
週間少年ジャンプ
週間少年サンデー
週間少年マガジン

上記の結果を見てると、全て取り出すという結果は同じですが、「 list 」で取り出す場合は「 全部 」取り出してしまうのに対して、「 for文 」で取り出す場合は「 一つ一つ取り出す 」事が可能になります。

プログラミングでは、データを正確に抽出し、必要に応じて加工することが多いです。例えば、「週間少年ジャンプ」だけを抽出する場合、それを達成するためには「for文」を使用するのが適しています。この場合、不要なカッコやカンマなどの記号が含まれていないことが重要です。

for文の書き方

任意の変数名の部分は、分かりやすい命名がよいです。例えば番号の集合の変数で「 numbers 」というリストであれば、それを一つ一つ取り出すからfor文で書く場合は「 number 」のようなイメージです。

様々なfor文の使い方

ここからは、様々なfor文の使い方の例を解説していきます。

for文の出力を途中で止めたい場合に使用する「 break 」

「 break 」は条件に一致した場合に、ループ処理を止めるif文です。以下の例は、for文で数値「 1 ~ 5 」まで出力するプログラムですが、「 break 」の条件である「 3になったら終了 」により、プログラムを止めています。明示的にプログラムを中断したい場合に使用します。

Python
atas = [1, 2, 3, 4, 5] 

for data in range(datas[0], datas[4] + 1):
    print(data)
    if data == 3:
        print("dataが3になったので終了します")
        break
# 実行結果
1
2
3
dataが3になったので終了します

for文の出力を任意の出力をスキップさせたい「 continue 」

「 continue」は、for文などのループ中に使用できるif文で、条件に一致した場合、処理をスキップする事が出来ます。明示的に処理をスキップさせてい場合に使用します。

Python
datas = [1, 2, 3, 4, 5] 

for data in range(datas[0], datas[4] + 1):
    print(data)
    if data == 3:
        print("dataが3なのでスキップします")
        continue
# 実行結果
1
2
3
dataが3なのでスキップします
4
5

for文のループが終了後に処理をさせたい「 else 」

for文に「 else 」を書くと、ループ処理が正常に終了した場合に限り、処理を実行する事が可能になります。また、「 break 」で処理を止めると、実行されません。そのため使用例としては、「特定の条件が見つかったときにループを終了したかどうか」をチェックするために使用されます。

ループが正常に終了した場合

Python
li_lists = [55, 20, 3, 5]

for li_list in li_lists:
    if li_list == 1:
        print("1なので処理を中断します")
        break
else:
    print("ループが正常に終了しました。")
# 実行結果
ループが正常に終了しました。

breakで処理を止めている場合

Python
li_lists = [55, 20, 1, 5]

for li_list in li_lists:
    if li_list == 1:
        print("1なので処理を中断します")
        break
else:
    print("ループが正常に終了しました。")
# 実行結果
1なので処理を中断します
for文で指定した範囲の整数を順番に取得したい「 range() 」

組み込み関数の「 range() 」を使用します。

単純な出力
Python
for num in range(5):
    print(num)
# 実行結果
0
1
2
3
4

注意点は引数の1つ前の数字までしか出力されない事です。「 5を指定しているので、直前の数字は4 」従って、4まで出力されます。

引数を指定して出力する
Python
for num_r in range(1, 5, 2):
    print(num_r)
# 実行結果
1
3
for文でリスト、タプルの範囲を指定して一部の要素を取り出したい「スライス」

「スライス」はリストやタプルの要素のインデックス番号を指定して、その範囲の値を取り出す事が出来ます。インデックス番号に関して簡単に説明してから、「スライス」の解説をします。

インデックス番号の説明

インデックス番号は、0から始まると覚えておくとよいです。何番目の要素なのかを指定する時などに使用します。

リストの要素をスライスで指定して取り出す
Python
numLists = [10, 5 , 4 ,6]

for numList in numLists[1:3]:
    print(numList)
# 実行結果
5
4

Pythonのスライスは、開始インデックスから終了インデックスの1つ前までの要素を出力します。つまり、終了インデックスは含まれないことになります。

タプルの要素をスライスで指定して取り出す
Python
numLists = [10, 5 , 4 ,6]

for numList in numLists[1:3]:
    print(numList)
# 実行結果
10
5

for文でリスト、タプルに対して、インデックス番号と要素のペアを返す「 enumerate() 」

「 enumerate() 」はリストやタプルなどを出力する際に、インデックス番号を一緒に出力してくれる組み込み関数です。

インデックス番号を何番からスタートするかを指定する事も可能です。以下ではリストとタプルの出力結果です。タプルはインデックス番号を1番からスタートさせるプログラムにしてみます。

リストで出力した例
Python
enum_text = ["python", "php", "java"]

for index, enum_text in enumerate(enum_text):
    print(index, enum_text)
# 実行結果
0 python
1 php
2 java
タプルでインデックス番号を指定して出力した例

「 start=〇 」を使用する事で、任意のインデックス番号を指定できます。コーディングの分かりやすさで言えば「 start=〇 」は付けるべきだと個人的に思いますが、付けずに、番号だけでも指定できます。

Python
enum_text = ("python", "php", "java")

for index, enum_text in enumerate(enum_text, start=1):
    print(index, enum_text)
    

# 「 startなし 」
enum_text = ("python", "php", "java")

for index, enum_text in enumerate(enum_text, 5):
    print(index, enum_text)
# 実行結果
1 python
2 php
3 java

5 python
6 php
7 java
for文で複数のリストなど(イテラブルオブジェクト)の要素を同時に処理する「 zip() 」

「 zip() 」関数は、複数のリスト(または他のイテラブル)の対応する要素を同時に処理することができます。

イテラブルとはリストやタプルなどの事を指します。

リストを同時に処理する
Python
p_lists = ["python", "ruby", "java"]
f_lists = ["Django", "RubyOnRails", "SpringBoot"]

for p_list, f_list in zip(p_lists, f_lists):
    print(p_list, f_list)
# 実行結果
python Django
ruby RubyOnRails
java SpringBoot

辞書のキーと値を同時に処理する

辞書は基礎知識があれば、分かると思うのですが、基礎知識なしの場合は、分からないコードだと思います。今回はforループの解説になりますので、詳しい説明は割愛します。

プログラムの流れとしては、辞書「 p_dict 」「 zip() 」でまとめて処理できるようにしています。引数にしているのは、「 p_dict 」のキーと「 p_dict 」のバリューを「 keys() 」「 values() 」メソッドでそれぞれ取得しています。その結果を変数「 key 」と変数「 value 」に渡して、出力しています。

Python
p_dict = {"python" : "Django", "ruby" : "RubyOnRails", "java" : "SpringBoot"}

for key, value in zip(p_dict.keys(), p_dict.values()):
    print(key, value)
# 実行結果
python Django
ruby RubyOnRails
java SpringBoot
for文で「 zip() 」と「 enumerate() を組み合わせて出力する

複数のリストなどをまとめつつ、さらにインデックス番号をを付与する場合に使用します。

Python
last_name = ["", "綾波", "葛城"]
first_name = ["シンジ", "レイ", "ミサト"]

for last, first in enumerate(zip(last_name, first_name)):
    print(last, first)
# 実行結果
0 ('碇', 'シンジ')
1 ('綾波', 'レイ')
2 ('葛城', 'ミサト')
for文で「 reversed() 」を使用して逆順で出力する

リストなどのイテラブルオブジェクトを逆から出力する事ができます。

Python
last_name = ["", "綾波", "葛城"]

for r_name in reversed(last_name):
    print(r_name)
# 実行結果
葛城
綾波
for文の多重ループと多重ループさせる標準ライブラリ「 itertools.product() 」

今まで、for文を説明してきましたが、for文をネスト(入れ子)にすることで、多重ループにする事が出来ます。まずは、コードの動きから確認していきましょう。

Python
last_name = ["", "綾波", "葛城"]
first_name = ["シンジ", "レイ", "ミサト"]

for last in last_name:
    for first in first_name:
        print(last, first)
# 実行結果
碇 シンジ
碇 レイ
碇 ミサト
綾波 シンジ
綾波 レイ
綾波 ミサト
葛城 シンジ
葛城 レイ
葛城 ミサト

出力順は以下です。

  1. 変数「 last_name 」の最初の要素から出力される。上記の場合だと「 碇 」
  2. 変数「 first_name 」の全ての要素が出力される。上記の場合だと「 シンジ、レイ、ミサト 」
  3. その後に出力は変数「 last_name 」へ戻り、次の要素である「 綾波 」が出力される。

以上が繰り返される流れで出力されるのが、多重ループです。つまり外側1つと内側全部を繰り返し表示している流れですね。

そこで、多重ループを簡単に実装する標準ライブラリが「 itertools.product() 」です。

「 import itertools 」を読み込み使用する事が出来ます。コードは以下です。

Python
import itertools

last_name = ["", "綾波", "葛城"]
first_name = ["シンジ", "レイ", "ミサト"]

for last, first in itertools.product(last_name, first_name):
    print(last, first)
# 実行結果
碇 シンジ
碇 レイ
碇 ミサト
綾波 シンジ
綾波 レイ
綾波 ミサト
葛城 シンジ
葛城 レイ
葛城 ミサト
for文で辞書の操作
辞書のキーを取り出す

辞書型の変数「 item_dict 」をfor文で回すと、辞書のキー部分を取り出す事が出来ます。

Python
item_dict = {"doog_food" : 1000, "cat_food": 1200}

for item in item_dict:
    print(item)
# 実行結果
doog_food
cat_food
辞書のバリュー部分を取り出す「 values() 」
Python
item_dict = {"doog_food" : 1000, "cat_food": 1200}

for item in item_dict.values():
    print(item)
# 実行結果
1000
1200
辞書のキーとバリューを出力する「 items() 」
Python
item_dict = {"doog_food" : 1000, "cat_food": 1200}

for food, price in item_dict.items():
    print(food, price)
# 実行結果
doog_food 1000
cat_food 1200

辞書の詳しい説明の記事は、また後日、公開予定です。

以上となります。お読みいただきありがとうございました。

コメント