ループ処理
for文
シーケンス(リスト、タプル、文字列など)の要素を順番に処理します。
# リストのループ
fruits = ["りんご", "みかん", "ぶどう"]
for fruit in fruits:
print(fruit)
# 文字列のループ
for char in "Python":
print(char, end=" ") # P y t h o n
range関数
# 0から4まで
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# 2から7まで
for i in range(2, 8):
print(i) # 2, 3, 4, 5, 6, 7
# 0から9まで2刻み
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
# カウントダウン
for i in range(10, 0, -1):
print(i) # 10, 9, 8, ..., 1
enumerate(インデックス付きループ)
fruits = ["りんご", "みかん", "ぶどう"]
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")
# 0: りんご
# 1: みかん
# 2: ぶどう
# 開始番号を指定
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
while文
条件がTrueの間ループを繰り返します。
count = 0
while count < 5:
print(count)
count += 1
break と continue
# break: ループを中断
for i in range(10):
if i == 5:
break
print(i) # 0, 1, 2, 3, 4
# continue: 次の反復へスキップ
for i in range(10):
if i % 2 == 0:
continue
print(i) # 1, 3, 5, 7, 9
for-else / while-else
ループが正常終了(breakされなかった)場合にelseブロックが実行されます。
# 素数判定
n = 17
for i in range(2, n):
if n % i == 0:
print(f"{n}は素数ではありません({i}で割り切れます)")
break
else:
print(f"{n}は素数です")
ネストされたループ
# 九九の表
for i in range(1, 10):
for j in range(1, 10):
print(f"{i*j:3}", end="")
print() # 改行
zip(複数リストの同時ループ)
names = ["太郎", "花子", "次郎"]
ages = [20, 22, 19]
cities = ["東京", "大阪", "札幌"]
for name, age, city in zip(names, ages, cities):
print(f"{name}({age}歳、{city})")
内包表記(リスト内包表記)
# 基本
squares = [x**2 for x in range(1, 6)]
# [1, 4, 9, 16, 25]
# 条件付き
evens = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 変換 + 条件
words = ["Hello", "World", "Python", "AI"]
long_lower = [w.lower() for w in words if len(w) > 3]
# ['hello', 'world', 'python']
実践例:FizzBuzz
for i in range(1, 31):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
まとめ
forはシーケンスの要素を順に処理range()で回数指定のループenumerate()でインデックス付きループwhileは条件ベースのループbreakで中断、continueでスキップzip()で複数リストを同時にループ- 内包表記で簡潔にリストを作成