Python の for 文

Python でコードを繰り返し実行する(ループする)には、for 文 か while 文を使います。

ここでは Python の for 文 についてご説明します。

Python の for 文 - in

Python の for 文で in を使って、list、タプル、辞書(dictionary)などのひとつひとつの要素や、文字列の中の一文字ずつに対して、順番に何か処理を実行することができます。

例えば、list の中の値を順番に全部 print したい時は次のようにできます。

names = ["Tanaka", "Suzuki", "Sato", "Yamada"]

for name in names:
    print(name)

実行結果は次のようになります。前の要素から順番に出力されていますね。

Tanaka
Suzuki
Sato
Yamada

同じようなコードで、文字列の中の一文字ずつを出力することができます。

name = "Suzuki"

for s in name:
    print(s)

実行結果は次のようになり、前から一文字ずつ出力されていますね。

S
u
z
u
k
i

Python の for 文 で continue する

for 文のコードブロックの中で continue 文を使うと、コードブロック内のそれ以降のコードをスキップして、次に進ませることができます。

例えば、names リストの要素の値が Sato の時は続くコードをスキップしたいという時には、次のようにできます。

names = ["Tanaka", "Suzuki", "Sato", "Yamada"]

for name in names:
    if name == "Sato":
        continue
    print(name)

実行結果は次のようになり、name が Sato の時には続く print(name) を実行せずに次の要素にいくので、Sato は出力されていません。

Tanaka
Suzuki
Yamada

Python の for 文 で break する

for 文のコードブロックの中で break 文を使うと、そこで for 文のループを抜けることができます。

names リストの要素の値が Sato の時に for ループを抜けるには、次のようにします。

names = ["Tanaka", "Suzuki", "Sato", "Yamada"]

for name in names:
    if name == "Sato":
        break
    print(name)

実行結果は次のようになり、name が Sato になった時に for ループを抜けているのがわかります。

Tanaka
Suzuki

Python の for - else 文

for 文の後に else 文を書くと、繰り返しが終わった後で else 文のコードブロックを一度だけ実行することができます。

for 文に else を追加してみましょう。

names = ["Tanaka", "Suzuki", "Sato", "Yamada"]

for name in names:
    print(name)
else:
    print('done!')

実行結果は次のようになります。 for 文のループが全て終わった後に、else 文のコードブロックが実行されていますね。

Tanaka
Suzuki
Sato
Yamada
done!

list が空っぽなどで、for のループが一度も実行されなくても、else 文のコードブロックは実行されます。

break を使ってループを抜けた時には else 文は実行されません。


Python の for 文 - range

Python の for 文で range を使うと、 開始、終了の数字、ステップなどを指定してループすることができます。


range の開始、終了の数字、ステップの指定の仕方は次の通りです。

range( 開始(整数), 終了(整数), ステップ(整数))

終了だけが必須で、開始とステップはオプショナルで指定しなくても大丈夫です。

指定しないとデフォルトで開始は 0、ステップは 1 が使われます。

終了で指定した数は含まれません。


それでは range をつかって、for 文でループしてみましょう。

for i in range(4):
  print(i)

実行結果は次のようになります。終了の整数しか指定していないので、0 から始まって、毎回 1 ずつ追加され、3 まで順番に print(i) が実行されています。

0
1
2
3

Python の for 文 - index

Python の for 文で enumerate() 関数を使うと、要素と共に index も取得できます。

例えば、names リストの index と要素の値を出力したい時は次のようにします。

names = ["Tanaka", "Suzuki", "Sato", "Yamada"]

for index, name in enumerate(names):
    print(index, name)

実行結果は次のようになります。 繰り返しの処理の中で index も使いたい時に便利です。

0 Tanaka
1 Suzuki
2 Sato
3 Yamada

また、range と要素の数を返す len()関数を組み合わせ、以下のように index でループすることも可能です。

names = ["Tanaka", "Suzuki", "Sato", "Yamada"]

for index in range(len(names)):
    print(index, names[index])

実行結果は先ほどと全く同じです。index に 0 から names の要素数 - 1 までが代入されて、ループの処理が行われます。

0 Tanaka
1 Suzuki
2 Sato
3 Yamada

Python の for 文 - 辞書(dictionary)

for 文で辞書(dictionary) をループするには何通りか方法があります。

シンプルに in を使うと for の変数には辞書のキーが入ります。dictionary[key] で値も取得できますね。

person = {
    "name": "Suzuki",
    "age": 15,
    "gender": "male"
}

for key in person:
    print(key, person[key])

実行結果はこのようになり、person 辞書のキーと値が出力されています。

name Suzuki
age 15
gender Male

辞書の items() メソッドを使って、キーと値を一緒に取り出すこともできます。

person = {
    "name": "Suzuki",
    "age": 15,
    "gender": "male"
}

for key, value in person.items():
    print(key, value)

実行結果はこのようになり、先ほどと同様に、person 辞書のキーと値が出力されています。

name Suzuki
age 15
gender Male

ネストした辞書からもこんな感じで値を取得することができます。

students = {
    "student1": {
        "name": "Suzuki",
        "age": 15,
        "gender": "male"
    },
    "student2": {
        "name": "Yamamoto",
        "age": 14,
        "gender": "female"
    }
}

for student_no, student_info in students.items():
    print(student_no, student_info["name"])

実行結果はこのようになり、キーと、値の辞書から name のキーの値が出力されています。

student1 Suzuki
student2 Yamamoto

辞書の値だけを取得したい時は、values() メソッドを使います。

person = {
    "name": "Suzuki",
    "age": 15,
    "gender": "male"
}

for value in person.values():
    print(value)

実行結果はこのようになり、person 辞書の値が出力されていますね。

Suzuki
15
Male

以上、Python の for 文 についてご説明しました。

© 2024 やさしい Python 入門