Pythonのforループ

Pythonのforループを学んでいて愕然とした.

C++はじめ,他の諸言語ではfor構文といえば

for(i=0;i<10;i++){
printf(“%d”, i);
}

というふうに,forの命令文にインデックスiを指定する.

Pythonでは

for i in range(10):

print(“%d” % i)

となる.

基本的には,for i in (リスト) という形で指定できるので,あらかじめaというリストがあり,それに沿ってiを動かしたいのであれば

for i in a:

とかける.だから,

a = [“a”,”b”,”c”,”d”,”e”]
for i in a:

print(i)

はa b c d e が一文字ずつ改行されて表示される.print()は最後に改行が入る.これ豆な.

そこでrangeというリストをつくる関数が肝心になってくる.
そう,Pythonのfor構文が悪いんじゃなくて,range関数がややこしい.

まず,range(10)は次のようなリストを返す.

>>>range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

つまり,range(要素の個数)を表す.

次に,変則的なリストを作るときは

>>> range(5,10)
[5, 6, 7, 8, 9]
>>> range(0,10,2)
[0, 2, 4, 6, 8]
>>> range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

最後の例が考えにくいかもしれないが,9から-1づつしていって,-1の一個手前は0なのでそこでリストがストップする.

つまり,range(リスト最初の数,リスト最後の数より一個手前,ステップ)となって,
引数が一個のときと意味が変わってくる.
しかも,第二引数の意味がややこしい.

でも,これは便利なのである.
たとえば,range(5,10)なら生成されるリストの要素の個数は10-5=5個となって,植木算的な補正は不要.

おそらくこういう考えから,C言語でも

for(i=0;i<10;i++)

と,第二引数を不等号で書く習慣がある.
だから,Pythonでは先述のrange(10)以外に

for i in range(0,10,1):

とも書ける.こう書くと,Cとの対応付けがはっきりする.

Python素敵.Cはオワコン.

広告

Pythonのforループ」への1件のフィードバック

  1. Perlでは
    for(my i = 0;i<10;i++;) #10回繰り返し
    for(0..9) #10回繰り返し
    foreach(@array) #配列の各要素について繰り返し
    for(0…$#array) #0から配列の添字の終わりまで繰り返し
    などが使えて素敵!

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中