ループ文(for文)と内包表記

ループ文

ループ文とは、条件が満たされている間与えられた処理を繰り返し行うコードのことを言います。ここではイテラブルを繰り返し処理するforループについて説明します。「イテラブル」とは繰り返し処理で要素を取り出すことができるオブジェクトのことで、今までで出てきたものでは文字列やリスト、タプル、辞書があります。 forループの構文は以下の通りです。

for <変数名> in <イテラブル>:
  処理コード

ここで、<変数名>イテラブルの要素が順番に割り当てられます。1つめの要素が<変数名>に割り当てられると次に処理コードの記載内容が実行されます。そこまでで1ループとなります。2ループ目ではイテラブルの次の要素が<変数名>に割り当てられ、そのまま処理コードが実行されます。forループではイテラブルの要素が尽きるまでこのループを繰り返します。

例を見てみましょう。

for string in 'Python':
  print(string)
P
y
t
h
o
n

enumerate関数を使うことで、要素のインデックスも同時に取得することができます。

for idx, string in enumerate('Python'):
  print(idx)
  print(string)
0
P
1
y
2
t
3
h
4
o
5
n

range関数を使うことで、処理を指定した回数だけ繰り返すforループを書くことができます。

for i in range(10):
  print(i)
0
1
2
3
4
5
6
7
8
9

始まりと終わりを指定することもできます。

# 1から始めて10になると終わる
for i in range(1,10):
  print(i)
1
2
3
4
5
6
7
8
9

間隔を指定することもできます。

# 1から始めて間隔2で処理を実行し、10になると終わる
for i in range(1,10,2):
  print(i)
1
3
5
7
9

numbersリストにある値の2乗の値を新しいリストに格納してみましょう。

square = [] # 2乗の値を格納する新しいリスト

for i in numbers:
  square.append(i**2)

print(square)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

内包表記

「ループ文」の最後で、numbersリストにある値の2乗の値を新しいリストに格納するコードを書きました。Pythonではこのコードを内包表記と呼ばれる簡略化された方法で書くことができます。内包表記は使い方次第でコードを簡潔にすることができる反面、コードの解読を困難にする場合もあります。

numbersリストにある値の2乗の値を新しいリストに格納するコードを内包表記を用いた書くと次のようなコードになります。

[i**2 for i in numbers]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]