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