今回は、リストを使ったループ処理について学びます。
復習:forループの書き方
Pythonにおいて、forループは次のような形式で書かれます。
for 変数 in イテラブルオブジェクト:
ループ処理
イテラブルオブジェクトには、前の記事で紹介したrange()で生成されるリストの他、一般的なリストも含まれます。
リストの中身を使ってループ処理をしたい場合には、特定のリストを指定してfor文を書くことができます。
例:リストを使ったループ処理
list = [1,2,3,4,5,6,7,8,9,10] #リストを作る
for i in list: #イテラブルオブジェクトとして、"list"を指定
print(i)
上記のコードを実行すると、リストに格納された要素(ここでは1から10までの整数)がひとつずつ出力されます。
つまり、このfor文において、”i”はlistの要素を指していることが分かります。
少し応用した例も紹介します。
例:リストに入っている整数の総和を計算する
list = [1,2,3,4,5,6,7,8,9,10]
sum = 0 #総和を示す変数
for i in list:
sum += i #sumに1つずつリスト内の要素を足していく
print(sum)
forループ処理は初めての方には少し難しい部分もあると思いますが、簡単に言えばfor=繰り返し処理です。同じような計算を繰り返し行いたい場合などさまざまな場面で使われるので、少しずつ理解していくことが大切です。
複数のリストをforループで使いたい場合
今まではリストを1つだけ使ってforループを行っていましたが、Pythonではzip()というメソッドを使うことで、リストを2つ使ってループ処理を行うことができます。
a = [1,2,3,4,5,6,7,8,9]
b = [2,5,7,9,11,13,15,17,19]
for i, j in zip(a,b):
print(i+j)
上記の例では、1回のループ処理で2つのリストを扱うため、新しく”j”という変数を定義しました。iがリストaの要素、jがリストbの要素を示しています。
インデックスを使いたい場合
リスト等で要素が入っている場所を示す「インデックス」の値を使いたい場合があります。このような場合は、enumerate()というメソッドを使うことで、インデックスをループ処理内で取得することができます。enumerate()はzip()と一緒に使うことも可能です。
a = [1,2,3,4,5,6,7,8,9]
for i, j in enumerate(a):
print(str(j) + " is in " + str(i))
インデックスは0からスタートするので、上記コードにおいて変数iは0,1,2,3,,,と増えていきます。変数jはリストaの要素を示しています。
a = [1,2,3,4,5,6,7,8,9]
b = [2,5,7,9,11,13,15,17,19]
for i, (j,k) in enumerate(zip(a,b)):
print(str(j) + " and " + str(k) + " is in " + str(i))
enumerate()とzip()を一緒に使う場合は、(j,k)としたように、2つ目と3つ目の変数を括弧で囲んでいます。括弧がないと、”ValueError: not enough values to unpack (expected 3, got 2)”(変数が3つあるはずなのに、2つしか得られなかった)というエラーが発生する場合があるためです。
まとめ
- forループでは、イテラブルオブジェクトとしてリストを指定できる
- zip()メソッドを使うと、2つのリストを同時に扱える
- enumerate()メソッドを使うと、リストのインデックスを取得できる