配列と添字の読み方
配列は第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つずれる
要素が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] に書き戻します。
| 添字 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 実行前 | 4 | 7 | 1 | 9 |
| 実行後 | 4 | 7 | 6 | 9 |
変わるのは添字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)まで動かします。
| i | Data[i] | total |
|---|---|---|
| 開始前 | — | 0 |
| 0 | 6 | 6 |
| 1 | 2 | 8 |
| 2 | 9 | 17 |
| 3 | 4 | 21 |
他の選択肢を選ぶと、次のようにずれます。
- ②(- 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は「添字を見て値を答える」問題でした。今回は逆向きで、 「この値を取り出すには添字をいくつにすればよいか」を聞かれています。 向きが変わっても、やることは対応表を書き出すだけです。
| 添字 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 値 | 12 | 15 | 18 | 20 |
18 が入っているのは左から3番目ですが、添字は0から始まるので 2 になります。「3番目だから3」と答えてしまうのが最も多い誤りです。
- ① 1 … Scores[1] は 15 です
- ③ 3 … Scores[3] は 20 です。「何番目」をそのまま書いた誤りで、いちばん引っかかりやすい選択肢です
-
④ 18 …
Scores[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 は、どの箱を増やすかを指示する番号の並び」だと分かります。
| i | Moves[i] | 増やす箱 | Boxes |
|---|---|---|---|
| 開始前 | — | — | [3, 0, 2] |
| 0 | 1 | Boxes[1] | [3, 1, 2] |
| 1 | 2 | Boxes[2] | [3, 1, 3] |
| 2 | 0 | Boxes[0] | [4, 1, 3] |
| 3 | 1 | Boxes[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] … 増やした回数そのものです。元の値に足すことを忘れています
CODE
3つの表記での書き方の違い
同じ「配列を全部調べて合計する」処理を、3つの表記で並べます。
Data = [6, 2, 9, 4] total = 0 i を 0 から 要素数(Data) - 1 まで 1 ずつ増やしながら繰り返す: ⎿ total = total + Data[i] 表示する(total)
data = [6, 2, 9, 4]
total = 0
for i in range(len(data)):
total = total + data[i]
print(total)
const data = [6, 2, 9, 4];
let total = 0;
for (let i = 0; i < data.length; i++) {
total = total + data[i];
}
console.log(total);
range(4) と JavaScript の i < 4 は
「4の直前まで」という意味です。指す範囲(0〜3)は同じで、書き方の約束が違うだけです。
この違いを知らないと、Pythonの range(len(data)) を見て「最後まで調べていない」と誤読します。
CHECK
このテーマのチェックリスト
- 「3番目の値」と言われたら、添字は 2 だと即答できる
- 要素数4の配列の最後の添字が 3 だと分かる
Data[2] = Data[2] + 5で変わるのは1か所だけだと分かる- 配列全体を調べる範囲は 0 から 要素数 - 1 までだと覚えている
Data[Moves[i]]のような二重の添字を内側から読める- Python・JavaScript の範囲指定が「直前まで」だと知っている
すべて即答できるようになったら、次は繰り返しの回数を数えるへ進んでください。 実際の問題で練習したい場合は、クイズの「基礎」から始めるのがおすすめです。