Python – for ループ
2009年7月25日 7:07 PM by Abalone




大抵のプログラム言語で使えるfor文。もちろんPythonでも使える。
私は元々はC言語プログラマなので、Pythonのfor文のような形のものにはあまり慣れていない。もちろん使えはするけれど、再度確認。


基本的な文法は、


for ループ変数 in シーケンス変数:
    ステートメント
    ...
else:
    ステートメント

とこんな感じになる。ただ、ループ変数と書くのが適切かどうかはよく分からない。このループ変数には、inの後ろに書かれているシーケンス変数中の各要素が順次代入されてくる。全部の要素に対する実行が終わると、else節が実行される。else節はあってもなくても構わない。このelse節については以前にも書いた。では、実際にやってみる。


str = "This is for test!!"
print "str:"
for s in str:
    print s,

出力は以下のようになる。


str:
T h i s   i s   f o r   t e s t ! !

文字列strに格納された文字が一文字ずつ変数sに入るので、こんな感じの出力になる。ちなみに、print文のsの後ろに","を付けているのは改行させないためである。

シーケンス変数は、文字列でなくてももちろん構わない。シーケンス型であれば何でもいいので、リストとかタプルも指定できる。以下は、文字列を要素に持つリストを使った例。


str_list = ["This", "is", "for", "test!!"]
for s in str_list:
    print s,

実行結果は以下。


This is for test!!

要素をタプルにしても同じように処理が可能。

タプルやリストを要素に持つシーケンスを処理することも可能。この場合にはループ変数を複数指定することも可能。ループ変数の書き方で、そのループ変数に何が入ってくるか変わるので、注意して記述する必要がある。以下はタプルを要素に持つリストを使った場合の例。


tuple_list = [("a","b"),("c","d")]

print "tuple_list 1:"
for x in tuple_list:
    print x

print "tuple_list 2:"
for [x, y] in tuple_list:
    print "%s ; %s" % (x, y)

print "tuple_list 3:"
for (x, y) in tuple_list:
    print "%s ; %s" % (x, y)

print "tuple_list 4:"
for x, y in tuple_list:
    print "%s ; %s" % (x, y)

出力結果は以下の通り。


tuple_list 1:
('a', 'b')
('c', 'd')
tuple_list 2:
a ; b
c ; d
tuple_list 3:
a ; b
c ; d
tuple_list 4:
a ; b
c ; d

tuple_list 1では、ループ変数を一つだけ指定しているので、リストに入ったタプルが一つずつ丸ごと要素として入ってきてループ処理が行われる。tuple_list 2以降では、ループ変数としてxとyの二つを渡しているので、リストに入っているタプルの要素がそれぞれxとyに渡されてくる。

tuple_list 3,tuple_list 4は、ループ変数の書き方を変えただけ。実行結果は同じになる。

forループを抜けるためのbreakと、ループの最初に戻るcontinueも使用可能。


clist = ["a","b","c","d","e"]
for s in clist:
    if s=="b":
        continue
    if s=="d":
        break
    print s,

これの出力結果は以下のようになる。


a c

a,b,c,dの各文字がループ変数sに入って渡されてくるが、"b"が渡されたときにはcontinueが実行されるので、for文の先頭に戻って次のループに入るので、"b"は出力結果には含まれない。"d"が渡されてきたときには、breakが実行されるので、ループ終了。"e"は処理されないでループ終了。

もちろんforループのネストもできるので、色々な処理が可能になる。C言語なんかのforループとは異なるが、慣れると使いやすい。便利です。





トラックバックURL


この記事に対するコメント/トラックバックはまだありません


コメントをどうぞ

お名前(必須)
Eメールアドレス(公開されません)(必須)