Remrinのpython攻略日記

python3に入門しました。python3についてあれこれとサンプルコードとか。

ループ処理

ループ処理について。

for イテレータ(シーケンスなど)を添える
while イテレータの代わりに条件式。while True, while 1という形をよく見る
break ブロックから抜ける
continue それ以降のループブロックを実行せず、最初に戻る
else forブロックやwhileブロックで使う時は、ループの実行後の処理。ただし、breakすると無視

 

x = 0
while x < 10:
    x +=1
    print(x, end=" ")
else:
    print("finished")
# 1 2 3 4 5 6 7 8 9 10 finished

x = 0
while x < 10:
    x +=1
    print(x, end=" ")
    if x == 5:
        break
else:
    print("finished")
print("ended")
# 1 2 3 4 5 ended

x = 0
while x < 10:
    x +=1
    if x % 2 == 0:
        continue
    print(x, end=" ")
else:
    print("finished")
# 1 3 5 7 9 finished

 
・反復中のリスト自身を改変したいときは、スライスをループ要素とする。

nlist = list(range(6))

for i in nlist[:]:
    if i % 2 == 0:
        nlist.append(i)
        
print(nlist)
# [0, 1, 2, 3, 4, 5, 0, 2, 4]

 
ネストしたループから一気に抜けるには
・フラグ管理
・エラーをraiseして、try/catch
・関数化など。

def break_test(escape):
    counter = 0
    for i in range(10):
        for j in range(10):
            counter += 1
            print(counter, end=" ")
            if i * j == escape:
                print("i={}, j={}".format(i,j))
                return

break_test(8)
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 i=1, j=8            

 

enumerate()

 ループカウンタとして使える。
 回数や条件を判断してループを抜けられる。
 

zip()

 2つのシーケンスを使ったループが作れる。

for i, j in zip(["A", "B", "C"], [1, 2, 3]):
    print(i, j)
# A 1
# B 2
# C 3