Pythonで要素を1つずつ取り出し要素がなくなるまで処理を繰り返し実行させるfor文について解説します。
for文の書き方
for文はイテラブルオブジェクトから要素を1つずつ取り出し要素がなくなるまで繰り返し実行させる際に使用します。
イテラブルオブジェクトについては「Python入門 イテラブルオブジェクトの種類」で解説しています。
for文の書き方は下記の通りです。
for 変数 in イテラブルオブジェクト:
処理1
処理2(複数行も可能)
インデント(字下げ)は半角空白4つ分です。インデントしないとエラーとなります。
サンプルプログラム(ソースコード)
実は文字列もイテラブルオブジェクトです。
ここで注目してほしいところは5行目です。変数 a は事前に定義(代入)していません。for文はイテラブルオブジェクトから要素を1つ取り出すと変数 a に代入するため、事前に変数を定義(代入)する必要はありません。
# 繰り返しに使用するイテラブルオブジェクト(文字列)
site_name = "Python Start"
# for文による繰り返し処理
for a in site_name:
print(a)
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_021.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、for文は1文字を1要素として取り出し要素が無くなるまで繰り返し処理します。半角空白も1文字として処理されます。
(trial) C:\code\py310\venv\trial>python sample_code_021.py
P
y
t
h
o
n
S
t
a
r
t
(trial) C:\code\py310\venv\trial>
for~else文の書き方
for~else文はfor文の繰り返し処理が終了した後にelseの処理が実行されます。
for~else文の書き方は下記の通りです。
for 変数 in イテラブルオブジェクト:
処理1
処理2(複数行も可能)
else:
繰り返し終了後に実行される処理1
繰り返し終了後に実行される処理2(複数行も可能)
サンプルプログラム(ソースコード)
for文のサンプルプログラムに「else」以下を追加しました。
# 繰り返しに使用するイテラブルオブジェクト(文字列)
site_name = "Python Start"
# for文による繰り返し処理
for a in site_name:
print(a)
else:
print("繰り返し終了後に実行")
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_022.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
for文の繰り返しがすべて終了した後で「print(“繰り返し終了後に実行”)」の処理が実行されます。
(trial) C:\code\py310\venv\trial>python sample_code_022.py
P
y
t
h
o
n
S
t
a
r
t
繰り返し終了後に実行
(trial) C:\code\py310\venv\trial>
breakで繰り返しを終了する
「break」は、主にif文と共に用いられ繰り返しを終了する際に使用します。
if文の条件が成立したら「break」を実行し「break」以降の処理は行わず繰り返しを終了します。
サンプルプログラム(ソースコード)
変数 site_name に代入した文字列(Python Start)を左から1文字ずつ取り出して繰り返し表示するプログラムです。
# 繰り返しに使用するイテラブルオブジェクト(文字列)
site_name = "Python Start"
# for文による繰り返し処理
for a in site_name:
# 変数 a の値が「半角空白」なら繰り返しを終了する
if a == " ":
break
else:
# 変数 a が「半角空白」以外なら else では pass(何もしない)する
pass
print(a)
else:
print("breakで繰り返しを終了するとelseの処理は実行されません。")
for文中にif文が入っています。このような階層構造を入れ子(ネストとも)と呼びます。「pass」の行頭にはインデント2つ分(半角空白8個分)を記述します。if文中にif文を入れ子にしたりfor文中にfor文を入れ子にすることもあります。ただし、階層を深くすると複雑になりプログラムが読みづらくなるので注意が必要です。
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_023.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、変数 a の値が「半角空白」なら「break」により繰り返し処理が終了しプログラムが終了します。
「break」により繰り返しを終了すると「else」を含む以降の処理は実行されません。
(trial) C:\code\py310\venv\trial>python sample_code_023.py
P
y
t
h
o
n
(trial) C:\code\py310\venv\trial>
continueで以降の処理をスキップする
「continue」は、主にif文と共に用いられ「continue」以降の処理をスキップする際に使用します。
if文の条件が成立したら「continue」を実行し「continue」以降の処理は行わず繰り返しを継続します。「break」との違いは「break」は繰り返しを終了しますが「continue」は繰り返しを継続することです。
サンプルプログラム(ソースコード)
ここで注目してほしいところは13行目です。前のif文の条件(a == ” “)が成立すると「continue」が実行され「print(count)」はスキップされます。
# 繰り返しに使用するイテラブルオブジェクト(文字列)
site_name = "Python Start"
# for文による繰り返し処理
for a in site_name:
# 変数 a の値が「半角空白」なら
# continue以降の処理は行わず繰り返しを継続する
if a == " ":
continue
else:
# 変数 a が「半角空白」以外なら else では pass(何もしない)する
pass
print(a)
else:
print("continueで繰り返しを継続するとelseの処理も実行されます。")
サンプルプログラム(ソースコード)の保存先
- 保存先(venv仮想環境):C:\code\py310\venv\trial
- ファイル名:sample_code_024.py
- エンコード:UTF-8
コマンドプロンプトでサンプルプログラム(ソースコード)を実行
実行すると、if文が成立した「半角空白」は continue によりスキップされ表示されません。
(trial) C:\code\py310\venv\trial>python sample_code_024.py
P
y
t
h
o
n
S
t
a
r
t
continueで繰り返しを継続するとelseの処理も実行されます。
(trial) C:\code\py310\venv\trial>
まとめ
- for文はイテラブルオブジェクトから要素を1つずつ取り出し要素がなくなるまで繰り返し実行
- 「for」の行末には「:」コロンを付ける
- 「処理」の行頭はインデント(字下げ)する
- for~else文はfor文の繰り返し処理が終了した後にelseの処理が実行される
- 「for」と「else」の行末には「:」コロンを付ける
- 「繰り返し終了後に実行される処理」の行頭はインデント(字下げ)する
- 「break」は、主にif文と共に用いられ繰り返しを終了する際に使用する
- 「break」で繰り返しを終了すると「else」の処理は実行されない
- 「continue」は、主にif文と共に用いられ「continue」以降の処理をスキップする際に使用する