###Pythonのfor文
pythonのfor文にどんな特徴があるのか少しまとめた。
####構造
for 変数 in イテレータ:
処理内容
python3にはforeach文がないそのためc#やJavaScriptなどとfor文の考え方が若干異なる。
python3のfor文はfor文というより他の言語でいうforeach文に近い。
イテレータの中からオブジェクトを一つ一つ取り出して処理していくような考え方である。
このイテレータの中には様々のものを置くことができる。リストはもちろん条件を満たせばクラス等も置ける。
pythonのstring型はイテレータでもあるので以下のような書き方もできてしまう。
for c in 'aiueo':
print(c)
実行結果は以下のようになる。
a
i
u
e
o
####range()関数を使ったfor文
繰り返し文でもっとも良く使うのはN回処理を繰り返すという、数字を基準にしてfor文を回していくことだ。
その際pythonではrange()関数を使う。
for i in range(3):
print(i)
実行結果は以下のようになる。
0
1
2
インデックスは0はじまりなことに注意
####ネストさせたfor文
次にfor文をネストさせてみる
for i in range(3):
for j in range(2):
print(i)
print(j)
実行結果は以下のようになる
0
0
0
1
1
0
1
1
2
0
2
1
実行結果から注目して欲しいのは、
for文を2つネストさせた場合2番目に書いたfor文が全て回りきるまで1番目のループは次のオブジェクトに行かない。
上の例でいえばjが1になったあとiが0から1になりその後はまたjがインクリメントされ0から1になる。
そのループが終わるとまたiがインクリメントされiが1から2になる。
おまけ:いろいろな言語でのfor文
様々な言語のfor文を集めた。
c#のfor文
c#で上記のコード を書こうとするとこうなる
namespace test
{
class Program
{
static void Main(string[] args)
{
for(int i = 0; i <= 2; i++){
for(int n = 0; n <= 1; n++){
System.Console.WriteLine(i);
System.Console.WriteLine(n);
}
}
}
}
}
c#ではfor文一回のループでインデックスをインクリメントしていることが分かる
対してpython3ではオブジェクトに対してループが回されている。
####rubyのfor文
rubyはpython3のfor文に考え方は近い
for i in 0..2 do
for n in 0..1 do
puts i
puts n
end
end
####JavaScriptのfor文
@shiracamus さんありがとうございます。
2015年度版以降
for (let i in [0, 1, 2]) {
for (let n in [0, 1]) {
console.log(i)
console.log(n)
}
}
2015年度版以前
for(var i=0; i<=2;i++){
for(var n=0; n<=1; n++){
console.log(i);
console.log(n);
}
}
2015年度版以前のJavaScriptはc#の考え方に近くindexを回している。
しかし、2015年度版以降になるとpythonやrubyによってきたような印象を受ける。