Pythonで回数を指定してループするのは通常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
はずれ!

目次へ戻る


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 483, today: 2, yesterday: 0
初版日時: 2016-07-12 (火) 23:56:16
最終更新: 2017-05-24 (水) 14:22:16 (JST) (146d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF