IT1-CODE-POCKET

配列と添字の読み方

配列は第3問のほぼ全問に登場します。ここがずれると、 後の計算がすべてずれるため、真っ先に固めるべきテーマです。 添字の数え方と、値の書き換えがどう反映されるかを、例題で確認します。

BASIC

添字は0から始まる

共通テスト用プログラム表記では、特に断りがなければ配列の添字は0から始まります。 Python も JavaScript も同じです。日常の「1番目、2番目」とは1つずれるため、 ここが最初のつまずきになります。

Data = [5, 10, 15, 20]
添字 0 1 2 3
5 10 15 20
日常の言い方 1番目 2番目 3番目 4番目

Data[2]3番目の 15 です。「2番目の10」ではありません。 問題文が「3番目の値」と書いていたら、頭の中で1を引いて添字にすると覚えてください。

逆のパターンにも注意:問題文に「添字は1から始まるものとする」と書かれている場合があります。 その一文があれば従います。断り書きの有無を必ず確認してください。

要素数と最後の添字は1つずれる

要素が4個ある配列の最後の添字は 3 です。 要素数(Data) は4を返すので、最後の添字は 要素数(Data) - 1 と書きます。 この - 1 を落とすと、存在しない Data[4] を参照してエラーになります。

EXERCISE 1

例題1:添字を選ぶ

次のプログラムの [ ア ] に入る値として正しいものを選びなさい。(x には 10 を代入したい)

Data = [5, 10, 15, 20]
x = Data[[ ア ]]
表示する(x)

選択肢:① 0 ② 1 ③ 2 ④ 3

答えと解説を見る

答え:② 1

添字を左から 0、1、2、3 と振り直すと、値は 5、10、15、20 の順に並びます。 10 が入っているのは添字 1 の位置です。

10 は日常の言い方では「2番目」なので、つい ③ の 2 を選んでしまいがちです。 「2番目 → 添字は1」と、必ず1を引いて考えてください。

なお ① の 0 を選ぶと 5、③ の 2 なら 15、④ の 3 なら 20 が入ります。 選択肢がすべて「配列の中の値の添字」になっているのは、 数え間違いを誘う典型的な作りです。

EXERCISE 2

例題2:要素を1つだけ書き換える

次のプログラムを実行したとき、表示される Data として正しいものを選びなさい。

Data = [4, 7, 1, 9]
Data[2] = Data[2] + 5
表示する(Data)

選択肢:① [4, 7, 6, 9] ② [4, 12, 1, 9] ③ [4, 7, 1, 14] ④ [4, 7, 5, 9]

答えと解説を見る

答え:① [4, 7, 6, 9]

Data[2] = Data[2] + 5 は、右辺を先に計算してから左辺に入れるという意味です。 右辺の Data[2] は現在 1 なので、1 + 5 = 6。これを Data[2] に書き戻します。

添字0123
実行前4719
実行後4769

変わるのは添字2の1か所だけです。② は添字を1と読み違えた場合、 ③ は添字を3と読み違えた場合、④ は「+5」を「=5」と読み違えた場合に選んでしまう選択肢です。

= は「等しい」ではなく「入れる」という意味だと押さえておくと、 x = x + 1 のような一見おかしな式にも迷わなくなります。

EXERCISE 3

例題3:配列全体を調べる範囲

配列の全要素を添字 i で順に調べるには、[ ア ]に何を入れればよいですか。

Data = [6, 2, 9, 4]
total = 0

i を [ ア ] まで 1 ずつ増やしながら繰り返す:
⎿ total = total + Data[i]

表示する(total)

選択肢:① 0 から 要素数(Data) - 1 ② 0 から 要素数(Data) - 2 ③ 1 から 要素数(Data) - 1 ④ 0 から 要素数(Data)

答えと解説を見る

答え:① 0 から 要素数(Data) - 1

要素数は4、添字は 0・1・2・3 です。すべてを1回ずつ通るには、 0 から 3(= 要素数 - 1)まで動かします。

iData[i]total
開始前0
066
128
2917
3421

他の選択肢を選ぶと、次のようにずれます。

  • ②(- 2 まで) … 0〜2 で終わり、最後の 4 が足されず total は 17
  • ③(1 から) … 先頭の 6 を飛ばして total は 15
  • ④(要素数 まで) … 存在しない Data[4] を参照してエラー

「0 から 要素数 - 1 まで」は配列を全部調べるときの定型です。 この形を丸ごと覚えてしまって構いません。

EXERCISE 4

例題4:値から添字を逆に求める

変数 x に 18 を代入するには、[ ア ]に何を入れればよいですか。

Scores = [12, 15, 18, 20]
x = Scores[[ ア ]]

表示する(x)

選択肢:① 1 ② 2 ③ 3 ④ 18

答えと解説を見る

答え:② 2

例題1は「添字を見て値を答える」問題でした。今回は逆向きで、 「この値を取り出すには添字をいくつにすればよいか」を聞かれています。 向きが変わっても、やることは対応表を書き出すだけです。

添字0123
12151820

18 が入っているのは左から3番目ですが、添字は0から始まるので 2 になります。「3番目だから3」と答えてしまうのが最も多い誤りです。

  • ① 1 … Scores[1] は 15 です
  • ③ 3 … Scores[3] は 20 です。「何番目」をそのまま書いた誤りで、いちばん引っかかりやすい選択肢です
  • ④ 18Scores[18] は「18番目の箱」を指しますが、 この配列に箱は4つしかないのでエラーになります。 [ ]の中に入るのは「取り出したい値」ではなく「場所」です
④ を選びたくなったら要注意です。 Scores[2] は「2という値を探す」ではなく、「2番の箱を開ける」という意味です。 配列は値で探すのではなく、場所を指定して取り出す——この違いが分かれば添字の問題はほぼ落としません。

EXERCISE 5

例題5:添字の中に配列が入る

次のプログラムを実行したとき、表示される Boxes として正しいものを選びなさい。

Boxes = [3, 0, 2]
Moves = [1, 2, 0, 1]

i を 0 から 要素数(Moves) - 1 まで 1 ずつ増やしながら繰り返す:
⎿ Boxes[Moves[i]] = Boxes[Moves[i]] + 1

表示する(Boxes)

選択肢:① [4, 2, 3] ② [3, 2, 3] ③ [4, 1, 3] ④ [1, 2, 0]

答えと解説を見る

答え:① [4, 2, 3]

Boxes[Moves[i]] という[ ]が二重になった形が出てきました。 見た目で身構えてしまう人が多いところですが、 内側から順に計算するだけです。

たとえば i が 0 のとき、内側の Moves[0]1 です。 これを外側に入れると Boxes[1] になります。つまり 「Moves は、どの箱を増やすかを指示する番号の並び」だと分かります。

iMoves[i]増やす箱Boxes
開始前[3, 0, 2]
01Boxes[1][3, 1, 2]
12Boxes[2][3, 1, 3]
20Boxes[0][4, 1, 3]
31Boxes[1][4, 2, 3]

Moves には 1 が2回、2 と 0 が1回ずつ入っています。 そのため Boxes[1] は 2回、Boxes[2] と Boxes[0] は 1回ずつ増えて [4, 2, 3] になります。

  • ③ [4, 1, 3] … i = 3 の行を忘れた場合の値です。Moves の要素は4つなので、繰り返しは4回まわります
  • ④ [1, 2, 0] … 増やした回数そのものです。元の値に足すことを忘れています
二重の[ ]は必ず内側から。 Boxes[Moves[i]] を見たら、まず Moves[i] を計算して数字に置き換え、 Boxes[1] のようなふつうの形に書き直してから読んでください。 この形は2次元配列シミュレーション型でも繰り返し出てきます。

CODE

3つの表記での書き方の違い

同じ「配列を全部調べて合計する」処理を、3つの表記で並べます。

Data = [6, 2, 9, 4]
total = 0

i を 0 から 要素数(Data) - 1 まで 1 ずつ増やしながら繰り返す:
⎿ total = total + Data[i]

表示する(total)
範囲の書き方だけが違います。 擬似言語は「0 から 要素数 - 1 まで」と終わりの値を書きますが、 Python の range(4) と JavaScript の i < 4「4の直前まで」という意味です。指す範囲(0〜3)は同じで、書き方の約束が違うだけです。 この違いを知らないと、Pythonの range(len(data)) を見て「最後まで調べていない」と誤読します。

CHECK

このテーマのチェックリスト

すべて即答できるようになったら、次は繰り返しの回数を数えるへ進んでください。 実際の問題で練習したい場合は、クイズの「基礎」から始めるのがおすすめです。

次に読むページ