目次
結論。自分の理解まとめ。
「for 変数名 in 繰り返しオブジェクト」
繰り返しオブジェクトはリスト等でも良いし、関数を使って繰り返しオブジェクトを生成するのも良し。
- for 変数 in range(ループ回数の指定)
- 繰り返す回数を決めたオブジェクトを作れる。forの変数にはカウンタが入る。
- for 変数1,変数2 in zip(オブジェクト1,オブジェクト2)
- 複数のオブジェクトを指定して、同時にループ処理できる
- for 変数,インデックス変数 in enumerate(オブジェクト,,インデックス開始番号(任意))
- オブジェクトの要素だけでなく、インデックスも同時に各変数から取得できる。
- 任意の第二引数を指定することで、インデックスの開始番号を変えれる。
ループの基本
Pythonのfor文は繰り返しができるオブジェクトを使います。リストやタプル等です。こういうオブジェクトをイテラブルオブジェクトと言います。
リストでループする
リストの要素を全て取り出して何らか処理する時につかう。
list= ["A", "B", "C"]
for str in list:
print(str)
出力:
A
B
C
途中でループを終了する
list= ["A", "B", "C"]
for str in list:
# Bの場合、ループ処理を終了する。
if str == "B" : break
print(str)
出力:
A
breakを使うことで、ループ処理を強制終了することができます。
ループの途中で、一部の処理をスキップする
list= ["A", "B", "C"]
for str in list:
# Bの場合、処理をスキップして、次のループに行く。
if str == "B" : continue
print(str)
出力:
A
C
continueを使うことで、ループ処理の途中で、処理をスキップして、次のループ処理へ移ることができます。
ループ終了後に処理を行わせる
list= ["A", "B", "C"]
for str in list:
print(str)
else:
print("終了時")
出力:
A
B
C
終了時
elseを使うことで、ループ処理終了後に、処理を実行することができます。
関数を使って、もっとループ処理を便利にする
range関数を使って、何回繰り返すか決める
for i in range(3):
print("ループ"+str(i)+"回目")
出力:
ループ0回目
ループ1回目
ループ2回目
range関数の引数にループ回数を指定できます。また、iからはカウンタが取得できますが、0から始まるので、1からスタートしたい場合はi+1にすると良いでしょう。
zip関数を使って、複数のオブジェクト要素を取得する
list = ["A", "B", "C"]
list2 = [1, 2, 3, 4]
for val,val2 in zip(list,list2):
print("list:" + val + "//list2:" + str(val2))
出力:
list:A//list2:1
list:B//list2:2
list:C//list2:3
zip関数の引数に複数のオブジェクトを指定することで、同時にループ処理を行うことができます。
また、各オブジェクトの長さが違う場合は、最小のオブジェクトの長さ分のループしかできませんでした。
enumerate関数を使って、オブジェクト要素とインデックスを取得する
list= ["A", "B", "C"]
for i, val in enumerate(list, 1):
print(str(i)+"回目ループ。要素:"+val)
出力:
1回目ループ。要素:A
2回目ループ。要素:B
3回目ループ。要素:C
enumerate関数の引数にオブジェクトを指定することで、要素だけでなくインデックスも同時に取得できます。
またenumerate()には第2引数があり、インデックスの開始値を指定できます。わざわざ+1する必要は無くなります。
ちなみにカウンタとかではなく、インデックスと言うのかは良く分かりません。個人的な理解では、要素に対するインデックスなら、開始位置が変われば、紐づく要素も変わると思ったのですが、そうでもなかったので、ただのカウンタに見えています。ここがあまり理解できていないポイントです。どちらにせよループ回数みたいなものと思っとけば支障はないです。