文系Fラン大学生のPython日記

文系大学生がPythonを学んでいく成長日記です。毎日四苦八苦。

「for文」はリボルバー

 

for文はプログラミングをやる上で絶対に切っても切り離せない。私はこれが大好きだ。なんでって、私は極度のめんどくさがりで効率厨だからだ。同じような文を二度書かされた時点で「これひょっとして無駄では?」と疑ってしまうほどの怠惰人間なので、後述するであろう自作関数も大好きだ。
要するに、for文は似たような処理を繰り返す場合に、本来なら何度も何度も書かなければならないことを一度で済ますことができるものだ。便利である。I love for文。

 

for文のイカれた仲間を紹介するぜ!

※斜体は変数やリストなど、私が勝手に名前をつけているもの。あと私は名前の付け方がまだ下手くそであることに関して先に謝罪させていただく。私と同じ初心者のみなさん、真似しないでください。走りゃいいんだよ走りゃあ! 今はな! とにかく場数を踏むのが先!
i:int型(計算可能な数値の形)の変数
A, B:型は決め打てないがとにかく何かの変数
list1, list2:リスト

① for i in range(len(list1))
iには現在のループ回数(ただし0から始まるので、1回目なら0, 2回目なら1)が数値として入る。(rangeはループ回数の指定、lenは要素数の取得なので、この場合list1の要素の数だけループする。今回はリストをループで回すことを考えているが、range(5)と記述すればもちろん5回ループするという意味になる)

② for A in list1
Aにはlist1の中で現在のループ回数(0から始まる)をインデックスに持つ要素が入る。

③ for i, A in enumerate(list1)
enumerateは上に挙げたふたつの両方の性質を兼ね備えていて、iには現在のループ回数(0から始まる)、Aにはlist1の中でiをインデックスに持つ要素が入る。

④ for A, B in zip(list1, list2)
②の引数(関数の外から引っ張ってくる値)を複数指定できるもの。Aにはlist1の、Bにはlist2の中で現在のループ回数(0から始まる)をインデックスに持つ要素が入る。2つのリストを同時にループで回すことができるというわけである。なお3つ4つと増えても同様だ。

 

例えると

さっきから「リストをループで回す」という表現を多用しているのだが、初めて見た時から、これはかなりわかりやすい表現だなと思っている。
私の脳内では、リストを使うfor文はリボルバーなのである。

リボルバー(装弾数=リストの要素数)の薬室に一つずつ弾(=要素)を詰めて、一回発砲する(=ループ一周の処理を終える)ごとにシリンダーが回る、次の弾が発射準備に入る(=次の要素が②のfor A in listで言うAの関数に代入される)、そしてシリンダーが一周したら終わり(=ループ終了)みたいなイメージなのである。

うん……中二病がバレたな……。