プログラミング必須の繰り返し処理ですが、今回はfor文を紹介します。
他の言語とは、使い方が違うところでもあります。
入門者も他の言語から学び始めた方も、見ておくことをおすすめします。
本記事はこんな方におすすめです。
本記事の内容
- for文の使い方
- 回数を繰り返す
- データの繰り返し
- enumerateの使い方
- breakの使い方
- enumerateの使い方
- zipの使い方
- breakの使い方
- elseの使い方
- reverseの使い方
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 完了
繰り返し処理が完了後に「完了」出力する処理が実行されていますね。
この処理は、正直、他の人のコードでも見たことはないくらいのレベルです。