[光-Hikari-のPython]05章-03 制御構文（for文～リストからの要素取り出し～）

#[Python]05章-03 for文～リストからの要素取り出し～
どのプログラムでもそうですが、基本的には以下の処理形式があります。

- 順次処理
- 制御（分岐）
- 繰り返し

順次処理は、「代入する」「加算する」といった処理、制御は「if文」による分岐処理です。今回はこの**繰り返し**について触れていきたいと思います。

繰り返し処理についてもいろいろ種類があるのですが、まずは**for文**について見ていきましょう。

##for文～リストからの取り出し処理～
まずは、リストから要素を取り出す処理を見ていきたいと思います。

for文については以下のように記載します。

```.py
for 変数 in 繰り返し対象:
    処理内容
```
基本的には、「繰り返し対象」の個所にリストを記載していきます。このリストの**要素の数だけ、for文内を繰り返し**ます。
実際にプログラムを書いて確認してみましょう。<font color="#00cccc">chap05</font>の中に、<font color="#00cccc">05-03-01.py</font>というファイル名でファイルを作成し、以下のコードを書いてください。

```.05-03-01.py
TohokuL = ['Aomori', 'Iwate', 'Akita', 'Miyagi', 'Yamagata', 'Fukushima']

for i in TohokuL:
    print(i)
    
print('For文から抜けました。')
```
＜05-03-01.py実行結果＞
><font color="#090" bgcolor="black">【実行結果】</font>
Aomori
Iwate
Akita
Miyagi
Yamagata
Fukushima
For文から抜けました。

順に追ってみます。まず、
**TohokuL = ['Aomori', 'Iwate', 'Akita', 'Miyagi', 'Yamagata', 'Fukushima']**
でリスト**TohokuL**を作成しましたが、これはリストで説明しました。

次に、forの中身に行きます。今回の繰り返し対象は**TohokuL**の6つの要素です。つまり**ループは6回繰り返される**ことになります。

**<font color="#0cc">【1ループ目】</font>**
**TohokuL**の**0番目**である'Aomori'が処理されます。この'Aomori'は**i**という変数に代入されます。
そしてそのままfor文内の処理がされ、**iの**中身である'Aomori'が出力されるのです。
そしてそのまま、**for文に戻り**ます。

**<font color="#0cc">【2ループ目】</font>**
**TohokuL**の**1番目**である'Iwate'が処理されます。先ほどと同じく、'Iwate'は**i**という変数に代入されます。
そして、for文内の処理がされ、**iの**中身である'Iwate'が出力されるのです。
そしてそのまま、**for文に戻り**ます。

**<font color="#0cc">【3ループ目】</font>**
**TohokuL**の**2番目**である'Akita'が処理されます。先ほどと同じく、'Akita'は**i**という変数に代入されます。
そして、for文内の処理がされ、**iの**中身である'Alita'が出力されるのです。
そしてそのまま、**for文に戻り**ます。

**これを6ループまで繰り返します。**6ループ目が終わると、初めてfor文の処理から抜け出して、それ以降の処理（今回は、「For分から抜けました」と出力）を行います。

<font color="#f60">※</font>ちなみに、リストでなく、タプルで実施しても出力されます。

##for文による和の計算
for文の基本的な問題として、リスト内にある整数の和（sum）を求めることを考えます。
例えば、numL = [5, 8, 9, 1, 2]という整数のリストがあったときに、和を計算して、25と出力するプログラムを作成します。<font color="#00cccc">chap05</font>の中に、<font color="#00cccc">05-03-02.py</font>というファイル名でファイルを作成し、以下のコードを書いてください。

```.py
sum = 0
numL = [5, 8, 9, 1, 2]

for n in numL:
    sum += n

print(f'{numL}のリスト要素の和：{sum}')
```
＜05-03-02.py実行結果＞
><font color="#090" bgcolor="black">【実行結果】</font>
[5, 8, 9, 1, 2]のリスト要素の和：25

まず、**sum = 0**についてです。
この**sum変数**に和を求めます。ですが、いきなり**sum**が現れると、**sum**変数の中身がわからない状態です。そこで、0で初期化しておきます。（この時点で**sum = 0**）

次にリストを作成しています。**numL = [5, 8, 9, 1, 2]**としています。

そして、for文の処理に入ります。

**<font color="#0cc">【1ループ目】</font>**
まず、**numL**で0番目の要素である**5**が取り出され、**n**に代入されます。そして、**sum += n**は[「02章-01」](https://qiita.com/ko0821/items/8355b4e192aa76a0e8ae#%E4%BB%A3%E5%85%A5%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)でも説明した、代入演算子です。
つまり、「**sum += n**」は「**sum = sum + n**」と同じことです。なので、**sum**に**5**が足されてた結果が**sum**に代入され、結果**sum**の値は**5**になります。
<font color=red>sum = 0 + 5</font>
そしてそのまま、**for文に戻り**ます。（この時点で**sum = 5**）

**<font color="#0cc">【2ループ目】</font>**
**numL**で1番目の要素である**8**が取り出され、**n**に代入されます。そして、**sum**に**8**が足されてた結果が**sum**に代入され、結果**sum**の値は**13**になります。
<font color=red>sum = 5 + 8</font>
そしてそのまま、**for文に戻り**ます。（この時点で**sum = 13**）

**<font color="#0cc">【3ループ目】</font>**
**numL**で2番目の要素である**9**が取り出され、**n**に代入されます。そして、**sum**に**9**が足されてた結果が**sum**に代入され、結果**sum**の値は**22**になります。
<font color=red>sum = 13 + 9</font>
そしてそのまま、**for文に戻り**ます。（この時点で**sum = 22**）

**<font color="#0cc">【4ループ目】</font>**
**numL**で3番目の要素である**1**が取り出され、**n**に代入されます。そして、**sum**に**1**が足されてた結果が**sum**に代入され、結果**sum**の値は**23**になります。
<font color=red>sum = 22 + 1</font>
そしてそのまま、**for文に戻り**ます。（この時点で**sum = 23**）

**<font color="#0cc">【5ループ目】</font>**
**numL**で4番目の要素である**2**が取り出され、**n**に代入されます。そして、**sum**に**2**が足されてた結果が**sum**に代入され、結果**sum**の値は**25**になります。
<font color=red>sum = 23 + 2</font>
そしてそのまま、**for文に戻り**ます。（この時点で**sum = 25**）

そうして、for文から抜けます。その結果が**25**と出力されております。

##演習問題
演習問題を用意しました。ぜひ解いてみてください。なお、ファイル名は[ ]内に指定したものを使用して、<font color="00cccc">chap05</font>内に作成ください。使用する変数名は好きな変数名を指定してかまいません。
<font color="3333ff">
[05-03-p1.py]
【1】numL=[3, 5, 6, 10, 7, 8]のリストを設定し、平均値を求めるプログラムを作成してください。
</font>
<font color="3333ff">
[05-03-p2.py]
【2】numL=[3, 5, 6, 10, 7, 8]のリストを設定し、奇数のみを出力するプログラムを作成してください。（ヒント：if文を使います）
</font>
##最後に
繰り返しもif文同様にどこでも登場するプログラムです。特に、情報処理技術者試験ではアルゴリズム関連の問題では必ず出てきますので、ぜひ押さえておきましょう。

###[【目次リンク】へ戻る](https://qiita.com/ko0821/items/379e8bd9e6ea01089419)