Python Python 入門 プログラミング

【python 入門】繰り返し処理 for文の使い方をマスターする!

python for eye

 

プログラミング必須の繰り返し処理ですが、今回はfor文を紹介します。

他の言語とは、使い方が違うところでもあります。

入門者も他の言語から学び始めた方も、見ておくことをおすすめします。

 

本記事はこんな方におすすめです。

hituji
繰り返し処理のfor文の使い方を知りたい

 

本記事の内容

  • for文の使い方
  • 回数を繰り返す
  • データの繰り返し
  • enumerateの使い方
  • breakの使い方
  • enumerateの使い方
  • zipの使い方
  • breakの使い方
  • elseの使い方
  • reverseの使い方

python入門 基礎まとめも参考にしてください。

>> python 入門 基礎まとめ

 

サンプルコード

 

スポンサーリンク

for文の使い方

 

forとは?その役割

forの役割は、処理を繰り返すことです。

決まった回数繰り返す、データ分繰り返すなどです。

pythonでは、データの分繰り返すというイメージです。

 

for文は次のように使います。

for文の構文

for 変数 in イテラブル:

    処理

 

イテラブル(繰り返し可能なもの)にはデータ(listやdict等)を使います。

変数には、データの中身が順に取り出されます。

 

実際にどういった処理か見ていきましょう。

 

回数を繰り返す

pythonはデータを繰り返すという性質がありますが、決まった回数の繰り返しもできます。

5回繰り返したい場合、5つ分のデータを作ります。

データの作り方は決まっていて、rangeを使います。

rangeの使い方

range(数値)

 

下記コードを見てみましょう。range(5)で0,1,2,3,4の5つ分データをつくって、ループします。

# 5回繰り返す
for i in range(5):
    print(i)
0
1
2
3
4

 

range(5)の0,1,2,3,4が「i」に、順番に取り出されて、繰り返されます。

rangeのかっこの中の数値を変えれば、繰り返す数を変更することができます。

 

データの繰り返す

次にデータを繰り返す方法を見ていきます。

listやdictなどのデータを取り出しながら処理をします。

list、tuple

listもtupleも使い方は同じです。

イテラブルとしてlistやtupleのデータを使います。

 

1次元の場合

# list
list_a = [10, 5, 7, 8, 9]
for a in list_a:
    print(a)
    
print('')
# tuple
tuple_a = (10, 5, 7, 8, 9)
for a in tuple_a:
    print(a)
10
5
7
8
9

10
5
7
8
9

 

順にデータ取り出させているのがわかりますね。

 

2次元の場合

リストの中にリストが入っている場合です。

# list
# 2次元分 list の中に listにする
a1 = [70, 170]
a2 = [65, 170]
a3 = [80, 170]
list_a = [a1, a2, a3]
for a in list_a:
    print(a[0], a[1])
70 170
65 170
80 170

 

1次元目が繰り返され、[70, 170] > [65, 170] > [85, 170]という風に取り出されます。

 

dict

次は辞書型と呼ばれる、dictのループをします。

 

dictはkeys(キー値)とvalues(データ)2つがあります。

どちらかのデータをイテラブルにして繰り返します。

コードを見ていきましょう。

dict_a = {"身長": 70,
          "体重": 170,
          "名前": "Aさん"}
# keysでループ
for key in dict_a.keys():
    print(dict_a[key])
    
print('')
# valuesでループ
for value in dict_a.values():
    print(value)
70
170
Aさん

70
170
Aさん

 

大抵はkeysの方をイテラブルにします。

valuesだと、key値抜けてしまうためです。

 

lenを使った処理

list、tupleでは、その長さをlenで取得して、ループする場合もあります。

 

まず、lenの動きを確認します。

list_a = [10, 5, 7, 8, 9]
print(len(list_a))
5

listのデータ数の5が取得できています。

 

この数値をrangeに入れれば、5回分ループができます。

list_a = [10, 5, 7, 8, 9]
for i in range(len(list_a)):
    print(list_a[i])
10
5
7
8
9

 

次はnumpyとpandasになりますが、まだ知らない方は飛ばしてください。

numpy、pandasを習得した後、再度確認すると良いでしょう。

numpy

numpyはリストと同じ方法です。

イテラブルにnumpyのデータを使います。

import numpy as np
np_a = np.array([10, 5, 7, 8, 9])

# イテラブルにnumpyを渡す方法
for i in np_a:
    print(i)
10
5
7
8
9

 

データ数でする場合は、lenではなく、numpyのshapeメソッドを使います。

# shapeでデータ数を取得する方法
for i in range(np_a.shape[0]):
    print(np_a[i])

 

2次元以上の場合もlistと同じです。

import numpy as np
a1 = [70, 170]
a2 = [65, 170]
a3 = [80, 170]
list_a = [a1, a2, a3]
np_a = np.array(list_a)
for i in np_a:
    print(i)
[ 70 170]
[ 65 170]
[ 80 170]

 

pandas

pandasは他とは少し違って、DataFrameのiterrowsメソッドを使います

iterrowsが繰り返すデータを作ってくれるので、これをイテラブルとして使います。

 

データは、ind: データNo、row: 行データが取得できます。

pandasは表データで使うことが多いので、2次元配列でデータをつくります。

import pandas as pd
# 表計算を想定して2次元データを使用
a1 = [70, 170]
a2 = [65, 170]
a3 = [80, 170]
list_a = [a1, a2, a3]
df = pd.DataFrame(data=list_a)

# itterrowsメソッドを使うと、ind: データNo、row: 行データが取得できます。
for ind, row in df.iterrows():
    print(ind, row[0], row[1])
0 70 170
1 65 170
2 80 170

 

データNoとデータが取得できていますね。

 

注意ポイント

numpy、pandasでは、できるだけforを使わずに計算しなければなりません。

処理がとても遅くなるためです。

行列計算や列、行同士の計算はforを使わずにできます。

 

ここまでが、基本的な使い方です。

これで、あなたもfor文を使えるようになりました!!!

第1ステップは完了です!

 

ここからは、少し応用した、知っていると便利な方法になります。

 

enumerateの使い方

先ほどから紹介している、イテラブルにlistやdictを指定する方法だと、データNoがわかりません。

1番目、2番目、...という順番です。

 

そいうときは、enumerateを使います。

 

for文の構文 enumerate使う場合

for ind, 変数 in enumerate(イテラブル):

    処理

 

indにデータNo、変数にデータが順に入っていきます。

*indはiとかでも全然OK

 

コードで見ていきましょう。

# list
list_a = [10, 5, 7, 8, 9]

# ind: データNo a(変数): データ
for ind, a in enumerate(list_a):
    print(ind, a)
0 10
1 5
2 7
3 8
4 9

 

取れていなかった、データNoが取得できています。

 

zipの使い方

リストが2つ以上あり、それを同時に繰り返し処理したい場合は、zipを使います。

 

for文の構文 zip使う場合

for 変数1, 変数2,... in zip(イテラブル1, イテラブル2,...):

    処理

各変数にデータが入って繰り返されます。

 

コードで見ていきます。

身長と体重のデータがlistに入っている前提として処理します。

# リスト2つを同時に繰り返したい場合
list_tall = [170, 175, 180]
list_weight = [70, 65, 80]

for tall, weight in zip(list_tall, list_weight):
    print(tall, weight)
170 70
175 65
180 80

 

リストのデータが各変数に入っていってますね。

 

 

breakの使い方

breakは強制的に繰り返し処理を抜け出すことができます。

 

for文の構文 break使う場合

for 変数 in イテラブル:

    処理

if 条件:

        break

breakはfor文のどこに配置しても良いです。

 

コードで見ましょう。

# list
list_a = [10, 5, 7, 8, 9]

# データが5の時に抜ける
for a in list_a:
    print(a)
    if a == 5:
        break
10
5

 

なぜ抜ける必要があるのか?

これは処理内容によりますが、例えば、データに異常が発生したとか、処理を継続する必要がなくなったとか色々あります。

 

 

reverseの使い方

昇順や降順で並んでいたデータがあったときは、データの最後から取得したいという状況があります。

そのときは、reversedを使います。

 

for文の構文 reversed使う場合

for 変数 in reversed(イテラブル):

    処理

 

コードで見ていきましょう。

# list
list_a = [10, 5, 7, 8, 9]

# データを逆からループ
for a in reversed(list_a):
    print(a)
9
8
7
5
10

データが逆から処理されていますね。

 

elseの使い方

for文の処理が完了したときに、実行したい処理がある場合は、for elseを使います。

処理が完了したとき:イテラブルのデータ全て処理されたとき

処理が完了してないとき:先程のbreakで処理を抜け出したとき

 

for文の構文 else使う場合

for 変数 in イテラブル:

    処理

else:

    処理

 

コードを見ていきましょう。

# list
list_a = [10, 5, 7, 8, 9]

# データを逆からループ
for a in reversed(list_a):
    print(a)
else:
    print('完了')
9
8
7
5
10
完了

 

繰り返し処理が完了後に「完了」出力する処理が実行されていますね。

 

この処理は、正直、他の人のコードでも見たことはないくらいのレベルです。

 

 

 

-Python, Python 入門, プログラミング