Python forやwhileによる繰り返しと内包表記とは
Pythonはforやwhileといった構文を用いて繰り返し処理を行うことができます。
また、内包表記というデータ構造を簡単に作成することができます。
ここでは、
「Pythonのforについてどんな構文や使い方なのか知りたい」
「Pythonのwhileを使い効率よく繰り返し処理を知りたい」
「Pythonは内包表記を用いることでデータ構造を簡単に作成する仕方を知りたい」
という方におすすめです。
Forとは
Pythonのforはデータ構造を連続して取り出したいことや特定の範囲内を繰り返し処理したい場合に使います。
例えば、1,2,3,4,5…のように連続する数字や文字の繰り返しに用います。
Forを使ってみよう
forの構文として以下のようになります。
for イテラブル変数 in イテレータオブジェクト:
イテレータオブジェクトは、文字列やリスト、辞書型といったインデックス要素を取り出すことができるオブジェクトになります。
イテラブル変数はイテレータオブジェクトに対して一つずつ取り出すことができる値を格納するオブジェクトになります。
for文の中でイテラブル変数をイテレータオブジェクトの代わりに要素を取り出し繰り返し処理することができる変数になります。
for文での使い方の例を見てみましょう。
文字列を繰り返す場合、
for i in 'apple':
print(i)
となり、結果は「a,p,p,l,e」と縦に表示されます。
iは自由に決めることができ、最初に文字列の0番目の要素(a)が出力されます。
それを文字列の要素分繰り返すことで一つずつiを出力されていきます。
繰り返しが終わるとループを抜けてプログラムが終了するという形になります。
リストと辞書型もそれぞれ見ていきましょう。
リストの要素を繰り返す場合、
li = [1,'apple','orange',2,100]
for i in li:
print(i)
となり、結果は「1,apple,orange,2,100」と縦に一つずつ表示されます。
リストの場合は要素ごとに1つずつ取り出すことができます。
リストのスライスや使い方はこちらから確認してください。
辞書型を繰り返す場合は、
dict_1 = {'code':'python','fruits':'apple'}
for key,value in dict_1.items():
print(key,value)
となり、結果は「code python,fruits apple」と縦に表示されます。
keyとvalueがありますが、items()関数により辞書型のキーと値を順に代入しています。
最初にkeyにitems関数の最初のキー要素が入ります。
valueはitems関数の最初の値の要素が入ります。
ここではkeyにcode、valueにpythonのように一つずつ繰り返し処理がされます。
items関数の他にkeys関数など詳しい辞書型の使い方はこちらから
forはrange関数を用いることができ数字の順番を繰り返すこともできます。
rangeとしての使い方として
for i in range(1,11):
print(i)
となります。
rangeは数字の範囲として指定することでその分だけ繰り返し処理できます。
range(start,end-1,step)という使い方になります。
例えば1,11は「1(start),11-1=10(end),1(step デフォルト=1で省略できる)」ということになり1から10までの数字を繰り返します。
stepを2とすると2ずつ飛ばした数字になります。
リストのスライスに似ていて使う場面があるので覚えておきましょう。
range関数はリストのインデックス要素を繰り返し処理に使うことや文字列の繰り返しでも用いることができます。
Whileとは
Pythonのwhileはある特定の条件式を元に繰り返し処理を使う場合に用います。
条件式は比較演算子を用いて範囲を絞り込みながら繰り返し処理を行うことができます。
Whileを使ってみよう
whileの構文は以下のようになります。
while 条件式:
条件式を達成するための数式など
条件式は「>,>=,<,<=,==,!=」といった比較演算子を用います。
比較演算子の詳細はif文の制御文において今後説明するので割愛します。
whileによって条件式に当てはまる範囲において繰り返し処理することができます。
条件式を達成するための数式などは必須ではありませんが、達成できない間繰り返し処理がされてしまい無限ループに繋がるので数式などあると抜け出すことができます。
While文の使い方の例を見てみましょう。
i = 0
while i < 5:
print(i)
i = i + 1
まず、i=0は条件式による初期値の変数を用意しています。
whileの条件式で5より小さい間となり、iは0で繰り返しになります。
繰り返しの中で0が表示され、i=i+1で0+1の計算結果をiに渡しています。
それによりi=1になります。
その後は5より小さい(4まで)条件を見ていきiが5になった時にプログラムが終了し4までの数字が表示されます。
i = i + 1は条件式を達成するための数式であり、条件式を見ると、この数式がないと無限ループになってしまいます。
forとwhileの違い
whileにより範囲を指定することで条件に合った繰り返しをすることができます。
forとの違いは、whileは条件式に基づいており、範囲を達成するための数式などを指定しない限りはループが続くことです。
forは要素にないインデックスは繰り返しエラーとして処理が中断してしまうことに違いがあります。
そのためforは決まった値がある場合などに使えますが、whileは決まった値はないが複数回同じ処理をしたい場合に使うといいと思います。
BreakとContinueの使い方
繰り返し処理においてpythonのBreakを使うことにより処理を任意のタイミングで止める事ができます。
Continueは任意のタイミングで条件判断した結果、ループを継続したい場合に使います。
breakとcontinueはwhile文かfor文の処理中に入れることができます。
breakの例として、
i = 0
while i < 5:
print(i)
if i == 3:
break
i = i + 1
となります。
iが3になったらループを終了しプログラムが終了します。
breakは、無限ループの際に特定の条件式においてループを終了させたい時などに使います。
continueの例として、
li = ['apple','orange','banana']
for i in li:
print(i)
if i == 'orange':
continue
となります。
continueはiがorangeならばループを続けることになるので、継続して次のbananaの処理になります。
continueは継続で変わらない事を示していますが、例えば、要素が入っているか確認するために処理した場合などに用います。
内包表記を使ってみよう
内包表記はPythonのデータ構造をシンプルに作成することができます。
内包表記ではループや条件分岐を用いて作成できます。
リスト内包表記と辞書型内包表記があり、例を見てみましょう。
リストの作成で1から5の数字を作成するには
li = [1,2,3,4,5]
print(li)
#または
li = []
for li_num in range(1,6):
li.append(li_num)
のようにappendを使う必要がある場合もあります。
そこで、内包表記を使うと、
li = [li_num for li_num in range(1,6)]
print(li)
になります。
append関数を使うところで3行分必要としていますが、内包表記を使うことにより1行で済みます。
最初のli_numはループの中の処理を表してます。
その後for…により繰り返しの処理の書き方によりループさせています。
辞書型を内包表記で表すと、
keys = ['code','fruits']
values = ['python','apple']
dict_1 = {key:value for key,value in zip(keys,values)}
になります。
辞書型はキーと値のペアであり、それに対応するためにzip関数をつけて辞書型を作成しています。
zip関数によりリストの要素と同じ値を結合するのに使います。
辞書型の内包表記を用いることでリストにキーと値を定義しておき容易に変更できるようになります。
内包表記を使うことで、読みやすくなり速く実行できるというメリットがあるので使ってみましょう。
まとめ
forやwhileを使い同じ処理を繰り返し処理で対応できるようにしましょう。
内包表記は初心者には難しいですが、リストや辞書型と繰り返しからなることに慣れておくと理解できるようになると思います。