Ad
1: 2016-07-12 (火) 15:56:16 njf ソース バックアップ No.1 を復元して編集 現: 2018-06-08 (金) 16:46:02 njf ソース 編集
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]]


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 2854, today: 3, yesterday: 0
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF