【Python入門】foreachをPythonで使ってみよう

※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。

参考サイト：[【Python入門】foreachをPythonで使ってみよう](http://programming-study.com/technology/python-foreach/)

#【Python入門】foreachをPythonで使ってみよう

foreach とは、スクリプト言語のなかでよく使われている繰り返し文です。配列から中身を取り出して、繰り返し処理したいときにとてもよく使われます。
スクリプト言語を使うときは、たいてい一律にまとまった処理をさせたいことが多いので、繰り返し文をマスターする事が出来れば、作業性も大幅アップ間違いなしです。

まず最初に、スクリプト言語の代表格であるperl でちょっとした foreach 文を書いてみましょう。

```
my @sports = ("baseball", "tennis", "soccer", "volleyball");
 
foreach my $name (@sports){
    print "$name\n"
}
 
$ perl foreach.pl 
baseball
tennis
soccer
volleyball
```

foreach文のなかで、 sports という配列の１番目からアクセスして、一番最後の要素にたどり着くまで、要素の表示をひたすら実行しています。

目次
1 [python でforeach をやってみよう](python でforeach をやってみよう)
2 [For文のTips: foreach の感覚でさらに便利な使い方をマスター](For文のTips: foreach の感覚でさらに便利な使い方をマスター)
2.1 [配列の中身を逆順に表示させたい](配列の中身を逆順に表示させたい)
2.2 [配列の中身を昇順に表示させたい](配列の中身を昇順に表示させたい)
2.3 [配列の中身を降順に表示させたい](配列の中身を降順に表示させたい)
2.4 [要素の番号を知りたい](要素の番号を知りたい)]


##python でforeach をやってみよう

それでは、さっそく python で foreach にトライしてみましょう！
と言ったものの、実はpython に foreach という名の関数がありません。
ではどうすればいいかというと、for 文がその代理を果たしてくれます。

では具体的に書いてみましょう。

```
>>> sports = ["baseball", "tennis", "soccer", "volleyball"]
>>> for name in sports:
...  print name
... 
baseball
tennis
soccer
volleyball
```


このように、foreach とほとんど同じような記述で、python でも繰り返し文を実行する事が出来ますね。

##For文のTips: foreach の感覚でさらに便利な使い方をマスター

###配列の中身を逆順に表示させたい

これまでのperl などでのスクリプト言語で配列の中身を逆順に表示させようと思うと、
・一度配列を逆順に詰め直してそれを表示する、
・配列の番号を取得してそれを後ろの番号からアクセスする、
といった方法がありますが色々と手間ですよね。このような方法をとらずに、簡単に行う事が出来る例を示しましょう。

```
>>> sports = ["baseball", "tennis", "soccer", "volleyball"]
>>> for name in reversed(sports):
...  print name
... 
volleyball
soccer
tennis
baseball
```

このように読み込ませる配列に reversed() をつけるだけで簡単に逆順に出来ます。

###配列の中身を昇順に表示させたい

ばらばらの数字が入った配列を昇順に表示させたいと思う事があるでしょう。
そのときは以下のようにしてみましょう。

```
>>> numbers = [8, 2, 7, 4, 3]
>>> for num in sorted(numbers):
...  print num
... 
2
3
4
7
8
```

このようにsorted 関数を用いる事で簡単に並び替える事が出来ます。

###配列の中身を降順に表示させたい

先ほどの例では、昇順に表示させていました。ただ場合によっては、逆に降順に並び替えたいということもあるでしょう。
その場合は以下のように書く事が出来ます。

```
>>> numbers = [8, 2, 7, 4, 3]
>>> for num in sorted(numbers, reverse=True):
...  print num
... 
8
7
4
3
2
>>> 
```

sorted 関数の reverse というキーワードを True に設定する事で降順にする事が出来ます。

###要素の番号を知りたい

今アクセスしている配列要素の番号を知りたいときがあると思います。そういったときには２通りの方法があります。

・range 関数を使った方法

```
>>> sports = ["baseball", "tennis", "soccer", "volleyball"]
>>> for i in range(0, len(sports)):
...  print i, sports[i]
... 
0 baseball
1 tennis
2 soccer
3 volleyball
```

これはC言語チックな感じですね。range関数を使って、アクセスする配列の要素番号を決定するやりかたです。正しいやり方ですが、少しめんどくさいですよね。
今回で学んだように foreach チックに楽に進めてみたいという方は次のやり方を試してみてはどうでしょう。


・enumerate 関数を使った方法

```
>>> sports = ["baseball", "tennis", "soccer", "volleyball"]
>>> for i, name in enumerate(sports):
...  print i, name
... 
0 baseball
1 tennis
2 soccer
3 volleyball
```


っきのrange関数を使ったのとは違って、どこからどこまで配列を表示する、といった記述をすることなく、さっぱりした記述で書けるのがいいですね。

２つの配列をまとめて、表示したい
配列が２つあったときに、その配列をまとめて処理したいときは、zip関数を使うと便利です。
例は以下のような感じです。

```
>>> sports = ["baseball", "tennis", "soccer", "volleyball"]
>>> people = ["Ichiro", "Nishikori", "Nakata"]
>>> for name, person in zip(sports, people):
...  print name, person
... 
baseball Ichiro
tennis Nishikori
soccer Nakata
```

ここでミソなのは、配列の要素の個数が違っていても、短い方に自動的に合わせて処理してくれるのがいいですね。