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 文 についてご説明しました。