モジュールのレッスン (1/4)
for ループと範囲
Python の for ループは、項目のシーケンスを反復するために使用されます。
リスト、文字列、範囲、辞書など、「反復可能な」ものなら何でも。
parole = ["ciao", "mondo", "!"]
for p in parole:
print(p)
# ciao
# mondo
# !パターンは常に同じです: for <variable> in <iterable>: の後に続きます。
項目ごとに 1 回実行されるインデントされたブロック。
range(...): 整数間隔を生成します
range は、整数の遅延シーケンスを生成します。 3 つの形式:
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8 (step)
range(5, 0, -1) # 5, 4, 3, 2, 1 (negative step)range は、slice と同様、右端に排他的です。これは遅延オブジェクトです。
すべての数値にメモリを割り当てるのではなく、一度に 1 つずつ生成します。
totale = 0
for i in range(1, 11):
totale = totale + i
totale # 55 (1+2+...+10)インデックスを使用した反復処理: enumerate
項目とそのインデックスを一緒にする必要がある場合は、enumerate を使用します。
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
print(i, p)
# 0 ciao
# 1 mondo
# 2 !enumerate は、2 つのペアに直接割り当てる (index, value) ペアを生成します
タプルのアンパック による変数 (専用のモジュールで確認します)
データ構造)。
2 つのシーケンスを並行して反復する: zip
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
print(f"{n} ha {a} anni")zip は最短シーケンスで停止します。
range() と Python の遅延
Python では、range() 関数はメモリ内に実際のリストを割り当てません。要求に応じて一度に 1 つずつ数値を生成する 遅延ジェネレーター を返します (たとえば、for ループ内)。これにより、RAM を肥大化させることなく、数百万の整数を反復処理できます。範囲値をリストとして検査するには、list(range(5)) を使用して明示的にキャストできます。
自分で試してみてください
range(...) の for ループを使用して 1 から 100 (両端を含む) までの数値の合計を計算し、それを `total` に代入して評価します。
ヒントを表示
range(1, 101) は 1、2、...、100 を生成します (右側では排他的)。
3 回の試行後に解決策が利用可能になります
復習演習
リスト `words = ['uno', 'due', 'tre']` を指定すると、enumerate を使用して '0:uno'、'1:due'、'2:tre' のような文字列のリスト `pairs` を構築します。 「ペア」を評価します。
ヒントを表示
enumerate(words) は、反復ごとに (インデックス、値) を返します。
3 回の試行後に解決策が利用可能になります
追加の課題
Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.
ヒントを表示
2 ~ 20 の偶数の整数のみを反復するには、 range(2, 21, 2) を使用します。
3 回の試行後に解決策が利用可能になります