1: 2016-07-12 (火) 15:56:16 njf[5] [6] [7] | 現: 2018-06-08 (金) 16:46:02 njf[5] [8] [9] | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | for i in range(3): | + | *基本 [#x743c32f] |
+ | [[Python]]で回数を指定してループするのは通常for文とrangeを組み合わせます。 | ||
+ | |||
+ | for i in range(3): | ||
print i | print i | ||
Line 7: | Line 10: | ||
1 | 1 | ||
2 | 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)) | ||
+ | |||
+ | とします。 | ||
+ | |||
+ | *for文のelse [#q3e3971e] | ||
+ | |||
+ | 他の多くの言語と異なり、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 | ||
+ | はずれ! | ||
+ | |||
+ | [[目次へ戻る>Python]] |
(This host) = https://njf.jp