Python

繰り返しの処理のプログラミング for

プログラミングで基本的なことは繰り返しです。
大きく分けると

  • あるグループの要素すべてについて繰り返す
  • ある条件を満たすまで繰り返す

の2つです。

Pythonでいうとこれらはfor, while, ifという構文を用いることで実現できます。
まずこのページではfor文について説明します。

forをつかった繰り返しのプログラム

for 変数 in グループ:
____実行処理

※ ____はインデント

です。インデントはタブかスペース4つです。
実行処理の部分を行うとき、
実行処理内の変数部分にグループ要素を代入して、
要素すべてに関して実行処理を行います。

グループの要素をリストで表します。



a = [1, 3, 7]

for i in a:
    print(i)

1
3
7

流れを見ていくと、

#aの最初要素 1 に対して
i = 1 iに1代入
print(i) >> 1 出力
#aの2番目の要素 3に対して
i = 3 iに3代入
print(i) >> 3 出力
#aの3番目の要素 7に対して
i = 7 iに7代入
print(i) >> 7 出力

終了

という流れです。

それぞれの要素の式を計算することもできます。

a = [1, 3, 7]
b = 0
for i in a:
    b = b + i
    print(b)

1
4
11

同様に流れを見ていきます

#iにaの最初要素 1 が入る
b = 0 + 1 (bに1が入る)
print(b) >> 1 出力
#iにaの2番目の要素 3 が入る
b = 1 + 3 (bに4が入る)
print(b) >> 4 出力
#iにaの3番目の要素 7 が入る
b = 4 + 7 (bに11が入る)
print(b) >> 11 出力

となっています。

この
b = b + i

b += i
と書くことができます。
1行の同じ変数が違う値を示してしまうので、
下の方がスッキリしています。

forを使った構文の例

いくつか他の例も示します

0から10まで足していく


answer = 0
for i in range(11):   #range(11)は0から11の整数
    answer += i
    print(answer)

0
1
3
6
10
15
21
28
36
45
55

フィボナッチ数列を100項目まで求める


a = [1, 1]   #初めの2項を定義
for _ in range(98):     # 98回処理を行う
    a_i = a[-2] + a[-1] # aの1個前と2個前の要素を足し、a_iに代入  
    print(a_i)      # a_iを出力
    a.append(a_i)    #a_iを新しい要素として追加

ここで
for _ in range(98):
は、変数は特にもちいないけれども、
for以下の処理を98回繰り返すことを表しています。

2
3
5



218922995834555169026
354224848179261915075

考え方でいろいろな使いみちがありますね。

forを入れ子にする

forは入れ子にすることもできます。

for 変数 in グループ①:
____for 変数 in グループ②:
________実行処理

という書き方で、

グループ①の最初の要素を代入
グループ②内の要素をすべて実行
グループ①の2番目の要素を代入
グループ②内の要素をすべて実行

となります。

例えば3×3のリストを用意します。

\begin{bmatrix}
1 & 2 & 3\\
4 & 5 & 6\\
7 & 8 & 9\\
\end{bmatrix}

matrix = [[1,2,3],[4,5,6],[7,8,9]]

として

for i in range(3): 
    for j in range(3): 
        print(matrix[i][j]) 

とすると、jすべてをiの各要素ずつについて書き出すため、

1
2
3
4
5
6
7
8
9

と行ごとにmatrixの要素が書き出されますが、

for j in range(3): 
    for i in range(3): 
        print(matrix[i][j]) 

とするとiすべてをj一つ一つの要素について書き出すので

1
4
7
2
5
8
3
6
9

のように列ごとに要素が書き出されます。

入れ子にする書き方は混乱しやすいので、要素をprintで確認していながらプログラムを組んだほうがいいでしょう。