リストとループを使ってみよう

これまで数値と文字列という単一の値をもつ変数の型について解説しましたが、今回は複数の値を持つリストについて解説します。

リストとは

リストとは、「順番に並べられた複数の値」をひとかたまりとして扱える変数の型を指します。

例えば

  • 1回目から5回目までのテストの結果
  • 出席番号順の生徒の身長
  • 数列
  • 時系列ごとの株価

といった順序付けられた複数の値をまとめて扱いたい場合に活躍します。

では、実際にリストを使ってみましょう。リストを生成する場合、大カッコで並べた値を囲みます。例えば、5回のテストの結果、69, 70, 81, 80, 70という5つの数字をリストに格納する場合、以下のようになります。

points = [69, 75, 81, 80, 77]

リストに格納されたそれぞれの値のことをリストの要素と呼びます。上の例だと、「75はリストpointsの要素です。」「100はリストpointsの要素ではありません。」といった言い方をします。

また、リスト自体をprint関数の引数に指定すると中身を確認することができます。

# 上のコードの続き
print(points)

上のコードを実行すると、以下の結果が表示されます。

[69, 75, 81, 80, 77]

リストの要素を参照・更新する

先程のリストのデータ構造は以下のようなイメージとなります。

要素毎に0から番号がつけられていますが、この番号のことを添字若しくはインデックスと呼びます。例えば「0番目の要素の値は69です。」「2番目の要素の値は81です。」といった使い方をします。番号は0から数える、という点に注意してください(超重要!!)。

リストの要素を取り出したい場合はインデックスを指定します。

リストのインデックス指定参照
リスト[インデックス]

例として、(0から数えて)2番目の要素を取り出して変数xに格納してみましょう。

my_list = [1, 3, 5, 7, 9]
x = my_list[2]
print(x) # 5が表示される

また、インデックス指定したものに値を代入すると、リストの値を更新することができます。

# 上の続き
my_list[2] = 100
print(my_list)  # [1, 3, 100, 7, 9]

実際に手を動かしてリストの値が変わっていることを確認してください。

リストをループ処理

次に、リストの要素をループ処理で取り出してみましょう。ループ処理とは、繰り返し処理とも呼ばれ、特定の処理を繰り返します。

Pythonにはループ処理を実行する方法がいくつか用意されていますが、代表的なものにfor文というものが挙げられます。for文は以下の構文となります。

リストのループ処理
for ループ内変数 in リスト:
    処理

リストの先頭から順に取り出した値がループ内変数に格納され、for文の内部で使用することができます。if文の時と同様、処理内部はスペース4個分のインデントをつけてブロックにします。

具体的な例を見てみましょう。1回から5回までのテストの結果が格納されたリストの値を順に表示させてみます。

points = [69, 75, 81, 80, 77]
for x in points:
    print(x)

次に、先程の1回から5回までのテストの結果が格納されたリストの値を順に足し算して合計を求めてみます。合計は変数sum_valに格納することにします。

sum_val = 0
points = [69, 75, 81, 80, 77]
for x in points:
    sum_val = sum_val + x
    print("現在のsum_val・・・", sum_val)

print("合計・・・", sum_val)

実行結果

現在のsum_val・・・ 69
現在のsum_val・・・ 144
現在のsum_val・・・ 225
現在のsum_val・・・ 305
現在のsum_val・・・ 382
合計・・・ 382

変数sum_valに順番に値が足しこまれていることが確認できます。

もう1つ例です。"こんにちは"を5回表示させてみます。

my_list = [1, 2, 3, 4, 5]
for x in my_list:
     print("こんにちは")

このようにループ内変数を使用しない場合もあります。また、このような処理の場合、100回表示させるとなると大変ですね。このようなときのために、Pythonにはrangeというものが用意されています。以下のプログラムは"こんにちは"を100回表示させることができます。

for x in range(100):
    print("こんにちは")

演習

では演習です。

演習問題1

鈴木さんは、1回から5回までのテストの結果が以下の通りでした。

  • 1回目:89点
  • 2回目:70点
  • 3回目:66点
  • 4回目:88点
  • 5回目:82点

テストの結果を表すリストを作成し、3回目のテストの結果を表示させてください。また、ループ処理で合計を求めてみてください。

解答例


# 点数のリスト
points = [89, 70, 66, 88, 82]

# 3回目は0から数えると2番目のインデックス
print(points[2])

# 順番に処理してmy_sumに足し上げる
my_sum = 0
for p in points:
    my_sum = my_sum + p

print(my_sum)

演習問題2

前回学習したif文と組み合わせて、80点以上の結果だけを合計してください。

解答例

# 点数のリスト
points = [89, 70, 66, 88, 82]

# 順番に処理してmy_sumに足し上げる
my_sum = 0
for p in points:
    if p >= 80:
        # 80点以上の場合のみ足し算
        my_sum = my_sum + p

print(my_sum)

演習問題3

"こんばんは"を50回表示させるコードを作成してください。

解答例

for x in range(50):
    print("こんばんは")