Ad

基本 anchor.png Edit

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))

とします。

Page Top

for文のelse anchor.png Edit

他の多くの言語と異なり、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
はずれ!

目次へ戻る


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 1274, today: 1, yesterday: 0
Princeps date: 2016-07-12 (Tue) 15:56:16
Last-modified: 2018-06-08 (Fri) 16:46:02 (JST) (440d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF