初めてのPython(13章)
whileステートメント
Pythonのwhileではelseブロックを使うことが出来る。
このブロックはループが終了する時に実行される。(条件判定式がfalseと評価された時に実行される)
breakでループを抜けた場合は実行されないので要注意。
while <条件>: 処理1 else: 処理2
処理1の中は、break/continue/passなどのステートメントを使うことが出来る。
break/continueはCとやってくれることは同じ。
passは何も処理をしないためのステートメントで、
「文法上どうしてもステートメントが必要だけど、ステートメントを追加して処理する必要がない」時に使う。
forステートメント
Pythonのforでは、指定した反復処理可能なオブジェクトの構成要素が、1つずつターゲットに代入され処理が実行される。
反復処理可能なオブジェクトとして、シーケンスが存在する。
反復処理可能なオブジェクトはイテレータを実装している。
また、while同様にelseブロックを使うことが出来き、break以外で終了したときに実行される。
ターゲットは、forループ終了後も代入された要素へのリファレンスを保持する。
for <ターゲット> in <オブジェクト>: 処理1 else: 処理2
反復処理可能なオブジェクトは、forループに加えて以下のような、
左から右の順にオブジェクトをスキャンする反復処理ツール全てに対応できる
- リスト内包表記
- in演算子
- ビルドイン関数map
range()とzip()
forステートメントの<オブジェクト>に該当する箇所で使う関数
- rangeは整数の数列からなるリストを返す[range([start], stop[, step])]
- zipはタプルのリストを返す[zip(seq1 [, seq2 [...]])]
リスト内包表記
forと同じようなことが出来て、なおかつ速度も速い。
ただし、必ず新しいリストを生成するという点はforとは異なる。
以下のように書くことで、
反復処理の対象オブジェクトの各要素に対して、式を実行した結果を要素とするリストが生成される。
[<ループ変数を使用する式> for <ループ変数> in <反復処理の対象となるオブジェクト>]
また、オブジェクトの要素のうち特定の条件を満たすものだけを対象とすることも可能
[<ループ変数を使用する式> for <ループ変数> in <反復処理の対象となるオブジェクト> if <条件>]
forを複数個並べて、forループのネストを実現することも可能(いくつでもネストできる)