Python[3]で回数を指定してループするのは通常for文とrangeを組み合わせます。
for i in range(3): print i
実行結果
0 1 2
このとき、iのスコープはループの外まであるので注意が必要です。
for i in range(3): print i print i
結果
0 1 2 2
rangeは等差数列を要素とする配列を生成する関数で、
>>> range(3) [0, 1, 2]
となります。pythonのforループはinの要素を順にループするので、このような結果となります。
rangeは最小値、上限、差を引数とすることもできます。
>>> range(1,4) [1, 2, 3] >>> range(1,4,2) [1, 3]
非常に回数の多いループで、リストを生成するとメモリがもったいない、という場合にはxrangeを使います。これははじめにまとめてリストを生成せず、ループの時に動的に値を生成するため、メモリが節約できます。
for i in xrange(3): print i
xrangeはxrange型のオブジェクトを返します。
xrange(3) >>> range(1,2)
xrangeは動的に値を生成する分だけループが遅くなりますが、rangeとの差はわずかです。それより、大きなリストを生成する負荷の方が高いため、非常に大きな数をループする時にはxrangeのほうが処理が速くなります。経験的には数千回程度以下のループだとさほど差を感じませんが、数十万回以上のループをさらに繰り返すような場合だとxrangeの方が体感できるほど速くなります。このようにxrangeの方がメリットが大きいためか、python3ではxrangeは廃止され、rangeがpython2のxrangeとなりました。python3でrangeからリストを生成するには、
rlist = list(range(5))
とします。
他の多くの言語と異なり、pythonのforループはelse文も書けます。
for i in range(3): print i else: print "loop end"
結果
0 1 2 loop end
forループのelse文はbreakを使ったときには処理を実行しません。
for i in range(3): print i break else: print "loop end"
結果
0
つまりループが最後まで回ってから終わったかどうかの判定が可能です。これにより、例えば、ループの中の処理で何か検索し見つかればbreakして、最後まで見つからなかったときにelse文で「無かった」とメッセージを出す、というような処理が簡単に実装できます。
# -*- coding: utf-8 -*- from random import randint for i in range(3): print i if i == randint(0,3): print u"あたり!" break else: print u"はずれ!"
結果1
0 1 あたり!
結果2
0 1 2 はずれ!
(This host) = https://njf.jp