こんにちは、数強塾代表の藤原進之介です。この記事は参考書『藤原進之介の最強120講義』の第52講「共通テスト用プログラム表記⑤配列」のWeb版です。共通テスト「情報Ⅰ」での重要度はS(毎年出る。落とすと致命的)、情報Ⅱでの接続先は(3)情報とデータサイエンスです。
配列は「変数がたくさん書けて便利なもの」と説明されがちですが、それでは半分しか説明できていません。配列が本当に何のためにあるのかを取り違えたまま先へ進むと、共通テスト第3問の空欄が最後まで埋まりません。この講ではなぜ変数を並べるのではなく配列にするのかを原理から説明し、添字が0から始まることの意味と、その1つ外を触ったときに何が起きるかを、実際に手を動かして確かめます。
前提となる代入と変数の話は第48講「共通テスト用プログラム表記①変数と代入」に書きました。まだの方は先にそちらをどうぞ。
1. この講の問い
なぜ tokuten1, tokuten2, tokuten3, … と変数を並べてはいけないのか。
2. 結論
配列とは「同じ名前+番号(添字)」で複数の値をまとめる仕組みであり、その本質は添字を変数にできることです。だから配列は反復と結婚するための道具であって、単なる変数の省略記法ではありません。共通テスト用プログラム表記では配列名は先頭文字が大文字、添字は特に説明がなければ0から始まり、要素数 n の配列で使える添字は 0 から n−1 までです。「添字」と「何番目」は必ず1ずれます。この1のずれと、その1つ外側(添字 n)を触る事故が、プログラム問題で最も多い失点源です。
3. なぜそうなるのか
3-1. 変数を並べる方式は、人数が変わった瞬間に壊れる
5人の得点の合計を出したいとします。第48講で習った変数だけで書くと、こうなります。
tokuten1 = 72
tokuten2 = 95
tokuten3 = 48
tokuten4 = 88
tokuten5 = 61
goukei = tokuten1 + tokuten2 + tokuten3 + tokuten4 + tokuten5
動きます。でもこれは5人のときにしか動かないプログラムです。30人になれば30行、300人になれば300行を書き直すことになります。
もっと深刻な問題があります。この方式では「i 人目の得点」が書けない。 tokuten の後ろの 1 は変数名の一部であって、数ではありません。tokuten と i をつないでも、それは文字列の連結にしかならない。変数名の一部を計算で作ることはできないのです。
つまり変数を並べる方式は、繰返し(反復)と原理的に組み合わせられません。ここが決定的です。
この理由づけは、私が塾で作った説明ではありません。文部科学省「情報Ⅰ」教員研修用教材 第3章 学習14「応用的プログラム」の冒頭に、そのまま書かれています。
プログラムは,変数にデータを代入したり,参照したりすることを繰り返しながら動作しているが,複雑なプログラムになってくると,変数名の異なる変数が多くなり,取り扱いが困難になるため,リストが使われることが多い。リストは複数の値を一つの名前(変数名)と番号(添字)によって管理する仕組みである。
文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第3章 学習14(令和元年・以下、同章からの引用はすべてこの資料)
3-2. 配列の本質は「添字を変数にできる」こと
同じ段落の3行あとに、本講で最も重要な一文があります。
リストの値の参照やリストへの値の代入は,リスト名と添字を使って,「リスト名 [ 添字 ]」として扱うことが多い。添字を変数で指定することで,その値を変えることで要素を自由に扱うことができる。
Tokuten[i] の i は変数です。だから i を 0, 1, 2, … と変えていけば、同じ1行が全要素を順に指す。これが配列の存在理由のすべてです。
大学入試センターの「共通テスト用プログラム表記の例示」も、繰返しの説明にわざわざ配列を持ち出しています。
x を 0 から 9 まで 1 ずつ増やしながら繰り返す:
⎿ goukei = goukei + Data[x]
(大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」第5節「9 制御文(繰返し)」)
繰返しの文法を説明する例が、配列の走査になっている。センターの側も「配列と反復はセットである」と考えているということです。言い方を変えるとこうなります。
- 変数は、値を1つ入れる箱です(第48講)。
- 反復は、同じ処理を何度も行う仕組みです。
- 配列は、その2つをつなぐ継手(つぎて)です。反復のカウンタ変数を、そのまま箱の住所として使えるようにします。
配列を「変数がたくさん書けて便利」と理解している人は、この継手の役割を見落としています。だから「なぜここで配列を使うのか」を問われたときに答えられません。
3-3. 国の教材は、これを「配列」と呼んでいない
ここで、独学するときに必ず引っかかる制度上のねじれを1つ書いておきます。私が一次資料を全文検索して確かめたことです(2026年8月3日実施)。
| 語 | 解説 情報編 共通教科/専門教科 |
情報Ⅰ 教員研修用教材 (全4章) |
情報Ⅱ 教員研修用教材 (序章+第1〜5章) |
|---|---|---|---|
| 配列 | 0件 / 2件 | 15件(第1章1・第3章11・第4章3) | 3件 |
| 添字 | 0件 / 0件 | 16件(すべて第3章) | 0件 |
| 要素数 | 0件 / 0件 | 0件 | 0件 |
| リスト (データ構造の意味) |
0件 / 2件 | 第3章57件・第4章14件 | 0件 |
読み方を1つずつ書きます。
(1) 学習指導要領解説の共通教科側に「配列」は1件もありません。 解説に出てくる2件は、どちらも専門学科の専門教科「情報科」の科目「情報システムのプログラミング」の記述です。
イについては,配列,リスト,レコードなどを扱うこと。
効率よくデータを扱うために,スタック,キュー,リスト,木構造,レコード,配列等のデータ構造について具体的な例と関連付けて扱う
高等学校学習指導要領(平成30年告示)解説 情報編 第2章 専門教科情報科の各科目「情報システムのプログラミング」〔指導項目〕(2)データ構造とアルゴリズム
つまり情報Ⅰ・情報Ⅱの本文には、配列を扱えという指示がありません。 それでも共通テストでは毎年出る。これは本書が集めている「情報Ⅰの本文の空白」の典型例です。
(2) 情報Ⅰ教員研修用教材は「配列」ではなく「リスト」の語で教えています。 第3章の「配列」11件の内訳は、単元の一覧表に単語として1件、探索の学習活動の指示に1件、残り9件はPythonコード中のコメント(「預金配列の最初の値は」など)でした。配列の定義を与えている本文は1つもありません。 定義しているのは3-1・3-2で引いた「リスト」のほうです。
(3) 「要素数」は、私が調べた範囲のどの国の資料にも1件もありませんでした。 一方、共通テスト用プログラム表記は 要素数(配列) を、表示する( ) と並ぶ数少ない組込み関数として明示しています。
要素数(配列)・・・配列の要素数を返す
例:Data=[10,20,30,40,50,60,70,80] の時 要素数(Data) は8を返す
大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」第5節
試験には出るのに、国の解説にも教材にも語が存在しない。 ここは教科書と過去問で埋めるしかありません。
(4) 情報Ⅱ側では「添字」も「要素数」も0件で、「リスト」もデータ構造の意味では0件でした。 情報Ⅱ教員研修用教材に出てくる「リスト」23件は、すべて「リスト化」「リストアップ」「参加者リスト」「商品リスト」「リスト型攻撃」といった別の意味です(1件ずつ目視で確認しました)。配列は情報Ⅱで消えるのではなく、名前を変えます。 何に変わるかは最後のブロックで扱います。
学習指導要領解説 情報編(共通教科・専門教科の両方)/情報Ⅰ教員研修用教材 第1〜4章(章ごとに別PDF)/情報Ⅱ教員研修用教材 序章・第1章・第2章・第3章前半・第3章後半・第4章・第5章/文部科学省「高等学校情報科の授業・研修用コンテンツ」ページ本文。空白・改行を除去したうえで数え、ヒット箇所は1件ずつ目視で用法を確認しました。なお授業・研修用コンテンツの「コンピュータとプログラミング」[1]〜[4]のスライドPDFはテキスト抽出ができなかったので、この4本は検索対象に入っていません。
3-4. なぜ添字は0から始まるのか
例示の規定はこうです。
配列変数の例:Tokuten[3],Data[2,4] (配列名は先頭文字が大文字)
※特に説明がない場合,配列の要素を指定する添字は0から始まる
前掲「試作問題『情報』の概要」第5節「1 変数」
「0から始まる」は、覚えるべき決まりごとであると同時に、理由のある設計です。
添字は「番号」ではなく「先頭からのずれ」だと思うとよい。 Data[0] は「先頭から0個ずらしたところ」、Data[3] は「先頭から3個ずらしたところ」。この読み替えをすると、次の関係が自動的に出てきます。
- 要素数が n なら、使える添字は 0 から n−1 まで(ちょうど n 個)
- 添字 i の要素は、(i+1) 番目の要素
- 「何番目か」を答える設問では、添字に +1 する必要がある
もう一つ、0始まりが選ばれる理由があります。0始まりだと「先頭から末尾まで」の範囲が「0 以上 n 未満」という形で書けます。下限は含み、上限は含まないこの書き方(半開区間)は、上限と下限の差がそのまま個数になり、隣り合う範囲をつなぐときも一方の上限が他方の下限とぴったり一致します。エドガー・ダイクストラは1982年の手稿「Why numbering should start at zero」(EWD 831)でこの点を整理し、0始まりのほうが誤りが少ないと論じました。
そして共通テスト用プログラム表記の例示自身が、実際にこの形で書いています。
i を 0 から kazu-1 まで 1 ずつ増やしながら繰り返す:
kazu は 要素数(Data) で得た要素数です。0 から「要素数−1」まで。 この -1 を落とすと、3-6で述べる事故が起きます。
3-5. 「添字」と「何番目」がずれることは、国の教材の中でも起きている
情報Ⅰ教員研修用教材 第3章 学習14 の図表2は、次のプログラムを載せています。
a=[56,3,62,17,87,22,36,83,21,12] # リスト a の定義
goukei = 0
goukei = a[3]+a[7]
print(goukei)
そして本文はこう説明します。
Python ではリストは 0 番目から始まることに留意する必要がある。このプログラム例ではリスト a の 3 番目と 7 番目の数値を足し算している。a[3]=17,a[7]=83 であるので,足し算の結果は 100 が表示される。
数値は正しい。私も実行して 100 になることを確認しました(4-5)。ですが、日本語の「3番目」を日常の意味(3個目)で読んだ人は、a の3個目である 62 を思い浮かべてしまいます。教材は「0番目から始まる」と断ったうえで、添字3のことを「3番目」と呼んでいるのです。
これは教材の誤りではなく、この分野の日本語が本質的に危ないことの証拠だと私は考えています。だから私は、答案の余白では「番目」という言葉を使わないことを勧めています。書くなら「添字3」か「4個目」のどちらかにする。混ざった瞬間に1ずれます。
3-6. 配列の外を触ると、プログラムは壊れる
要素数5の配列 Tokuten で、使ってよい添字は 0・1・2・3・4 です。Tokuten[5] は存在しません。
存在しないものを読もうとしたとき何が起きるかは、言語によって違います。Python は IndexError を出して止まります(4-2で実演します)。C言語のような言語では、止まらずに、隣の関係ない場所の値を読んでしまうことがある。これがバッファオーバーランという脆弱性の入口です。
共通テストの答案上では、もっと素朴な形で出ます。合計を求めるつもりで
i を 0 から 要素数(Tokuten) まで 1 ずつ増やしながら繰り返す:
と書いてしまう。-1 を落としただけです。これで最後に Tokuten[5] を触る。境界の1つ外——off-by-one エラーと呼ばれる、プログラミングで最も有名な間違いです。
逆向きの事故もあります。0 から を 1 から にしてしまうと、先頭の Tokuten[0] を数え落とす。添字を書くときは、必ず両端を1つずつ確かめる。 真ん中は勝手に合います。
3-7. 配列の「要素の値」が、そのまま別の配列の「添字」になる
ここが共通テストで最も頻出する型であり、配列の理解が本当に問われる場所です。
10人が0点から5点までの小テストを受けました。各点数が何人いるかを数えたい(度数分布)。素直に書けば「0点の人を数える」「1点の人を数える」…と6回の走査になります。ところが配列を使うと1回の走査で終わります。
Kosu = [0,0,0,0,0,0]
i を 0 から 要素数(Data)-1 まで 1 ずつ増やしながら繰り返す:
⎿ Kosu[Data[i]] = Kosu[Data[i]] + 1
Kosu[Data[i]] という二重の括弧が全てです。Data[i] は「i 番目の人の点数」という値ですが、それを Kosu の添字として使っています。3点の人が来たら Kosu[3] が1増える。
なぜこれが速いのか。探さなくてよいからです。Kosu の中を「3という値はどこだ」と探す必要がない。3という値そのものが行き先を教えてくれる。配列の添字は、単なる通し番号ではなく「ラベル」として使えます。 添字が意味を持つ瞬間です。
条件は2つあります。①ラベルにする値が整数であること、②その値の範囲があらかじめ分かっていて、その分だけ箱を用意してあること。点数が0〜5なら6個。この2条件が満たされない場面(たとえば氏名で集計したい)では、この技は使えず、別の道具が要ります。それが情報Ⅱのデータフレームであり、辞書型です。
3-8. 二次元配列は「表」である
例示は二次元配列の書き方も定めています。
配列変数の例:Tokuten[3],Data[2,4]
添字をカンマで区切って1組の角括弧に入れます。 Data[2][4] ではありません。この点は旧DNCL(旧課程「情報関係基礎」の言語)から引き継がれた書き方で、旧DNCLの説明にも Gyoretu[3,2] という例があります。
二次元配列は、行と列のある表そのものです。Ten[i,j] を「i 行 j 列」と読む。ここでの落とし穴はただ一つ、添字の順序です。
3人×4科目の表なら、Ten[0,3] は存在しますが Ten[3,0] は存在しません(行は0〜2しかない)。順序を取り違えると表が転置され、運が良ければエラーで止まり、運が悪ければ黙って別の値を返します。
なお、ここに一次資料上の空白があります。例示は Data[2,4] という宣言例を示すだけで、二次元配列を実際に使うプログラム例を1つも載せていません。 要素数( ) が二次元配列に対して何を返すのかも書かれていない。だから二次元配列が出題される場合は、必ず問題文の側で読み方が定義されます。例示にはこういう但し書きがあります。
しかしながら,問題文の記述を簡潔にするなどの理由で,この説明文書の記述内容に従わない形式で出題することもあります。したがって,共通テスト『情報Ⅰ』の受験に際しては,当該問題文の中の説明や指示に注意し,それらに沿って解答してください。
例示を暗記した人ほど、この型で事故ります。 二次元配列については「問題文が何と言っているか」を先に読んでください。
4. 手で確かめる
以下の数値はすべて手で計算し、そのうえで Python で独立に実行して一致を確認しました(2026年8月3日)。プログラム表記と Python は代入も添字も書き方が同じなので、そのまま置き換えて実験できます。
4-1. 合計と最大値をトレースする
配列 Tokuten = [72, 95, 48, 88, 61](要素数5、添字は0〜4)。まず合計を求めます。
Tokuten = [72,95,48,88,61]
kazu = 要素数(Tokuten)
goukei = 0
i を 0 から kazu-1 まで 1 ずつ増やしながら繰り返す:
⎿ goukei = goukei + Tokuten[i]
表示する(goukei)
| i | Tokuten[i] | goukei(この行の実行後) |
|---|---|---|
| 開始 | — | 0 |
| 0 | 72 | 72 |
| 1 | 95 | 167 |
| 2 | 48 | 215 |
| 3 | 88 | 303 |
| 4 | 61 | 364 |
手計算:72+95+48+88+61 = 364。一致しました。次に最大値とその位置を求めます。
saidai = Tokuten[0]
ban = 0
i を 1 から kazu-1 まで 1 ずつ増やしながら繰り返す:
| もし Tokuten[i] > saidai ならば:
| | saidai = Tokuten[i]
⎿ ⎿ ban = i
表示する(saidai, ban)
| i | Tokuten[i] | 更新するか | saidai | ban |
|---|---|---|---|---|
| 開始 | — | — | 72 | 0 |
| 1 | 95 | する(95 > 72) | 95 | 1 |
| 2 | 48 | しない | 95 | 1 |
| 3 | 88 | しない(88 < 95) | 95 | 1 |
| 4 | 61 | しない | 95 | 1 |
答えは最大値95、添字1。設問が「何番目か」を聞いていたら答えは2です。 ここで1を足し忘れる人が非常に多い。
なぜ i を 1 から始めたのかも確認しておきます。saidai の初期値に Tokuten[0] を入れてしまったので、添字0はもう比較済みだからです。もし初期値を 0 にすると、全部が負の値の配列で誤答します。初期値には「配列の外から持ってきた数」ではなく「配列の中の値」を置くのが安全です。
4-2. 境界を実際に踏み抜く
同じ配列で、両端と、その1つ外を触ってみます。
| 式 | 結果 |
|---|---|
Tokuten[0] |
72(先頭。1個目) |
Tokuten[4] |
61(末尾。要素数5 − 1 = 4) |
Tokuten[5] |
IndexError: list index out of range(止まる) |
要素数は5ですが、添字5はありません。「要素数」と「最後の添字」は違う数です。 これを体で覚えるまでは、ループの終端条件を書くたびに指を折って数えてください。
なお Python では Tokuten[-1] が末尾の 61 を返しますが、共通テスト用プログラム表記に負の添字の規定はありません。 Python の便利機能を試験に持ち込まないこと。
4-3. 度数分布を Kosu[値] 方式で集計する
10人の点数 Data = [3,5,2,3,0,4,3,5,1,3](0点〜5点)。Kosu を6個の0で初期化して走査します。
| i | Data[i] | 増やす箱 | Kosu の状態 |
|---|---|---|---|
| 開始 | — | — | [0,0,0,0,0,0] |
| 0 | 3 | Kosu[3] | [0,0,0,1,0,0] |
| 1 | 5 | Kosu[5] | [0,0,0,1,0,1] |
| 2 | 2 | Kosu[2] | [0,0,1,1,0,1] |
| 3 | 3 | Kosu[3] | [0,0,1,2,0,1] |
| 4 | 0 | Kosu[0] | [1,0,1,2,0,1] |
| 5 | 4 | Kosu[4] | [1,0,1,2,1,1] |
| 6 | 3 | Kosu[3] | [1,0,1,3,1,1] |
| 7 | 5 | Kosu[5] | [1,0,1,3,1,2] |
| 8 | 1 | Kosu[1] | [1,1,1,3,1,2] |
| 9 | 3 | Kosu[3] | [1,1,1,4,1,2] |
結果は 0点1人・1点1人・2点1人・3点4人・4点1人・5点2人。合計 1+1+1+4+1+2 = 10 で、人数10と一致します。この「度数の合計=人数」は検算に使えます。 一致しなければ、どこかで箱を間違えています。
ここで初期化を忘れる事故に触れておきます。Kosu を用意せずにいきなり Kosu[Data[i]] = Kosu[Data[i]] + 1 を書くと、そもそも足す相手がない。例示が代入文の項に
Tokutenのすべての値を0にする
という日本語の一文をわざわざ用意しているのは、このためです。配列は、使う前に全部0にする。 共通テストでこの行が空欄になることもあります。
4-4. 二次元配列で表を作る
3人×4科目の得点表 Ten(行が人、列が科目)。
| 列0 | 列1 | 列2 | 列3 | 行合計 | |
|---|---|---|---|---|---|
| 行0 | 72 | 95 | 48 | 88 | 303 |
| 行1 | 61 | 55 | 90 | 77 | 283 |
| 行2 | 84 | 68 | 73 | 59 | 284 |
| 列合計 | 217 | 218 | 211 | 224 | 870 |
行合計 303+283+284 = 870、列合計 217+218+211+224 = 870。縦から足しても横から足しても同じになるので、これが表の検算になります(内訳:72+95+48+88=303、61+55+90+77=283、84+68+73+59=284、72+61+84=217、95+55+68=218、48+90+73=211、88+77+59=224)。
行合計を出すプログラムは、繰返しを二重にします。
i を 0 から 2 まで 1 ずつ増やしながら繰り返す:
| goukei = 0
| j を 0 から 3 まで 1 ずつ増やしながら繰り返す:
| ⎿ goukei = goukei + Ten[i,j]
⎿ 表示する(i, "行目の合計は", goukei)
列合計を出したいなら、外側と内側を入れ替えます。i と j の役割はまったく対称です。ここを混乱しないためには、外側のループが「何を1つ確定させているか」を言葉にするとよい。上の例なら「1人分を確定させている」。列合計なら「1科目分を確定させている」。
添字の順序を取り違えるとどうなるかも確かめました。Ten[0,3] は 88 ですが、Ten[3,0] は IndexError で止まります。行は0〜2しかないからです。今回は止まってくれましたが、もし4行4列の正方形の表なら、止まらずに転置された値を返します。 正方形の表ほど危ないのはこのためです。
4-5. 教材のコードを再現する
3-5で引いた情報Ⅰ教員研修用教材 第3章 学習14 の図表2・図表3を、実際に走らせて確認しました。
a=[56,3,62,17,87,22,36,83,21,12]に対しa[3]= 17、a[7]= 83、和は 100(教材の記載と一致)- 同じ配列の総和は 399(教材の記載と一致)
教材の数値は正しい。ずれるのは「3番目」という日本語のほうである、というのが3-5の結論です。
4-6. 書く量はどれだけ減るのか
冒頭の問いに数で答えておきます。
| 人数 | 変数を並べる方式の代入行数 | 配列+反復の行数 |
|---|---|---|
| 5人 | 5行 | 3行 |
| 30人 | 30行 | 3行 |
| 300人 | 300行 | 3行 |
配列側は人数に依存しません。 5人でも300人でも「配列を用意する・合計を0にする・反復で足す」の3行で終わる。人数が変わってもプログラムを書き直さなくてよい——これが3-1で述べた「反復と結婚する」ことの実利です。
5. 共通テストではこう出る(重要度 S)
5-1. 出題側が「配列で表現する力」を明言している
これは推測ではありません。大学入試センター自身が、問題作成部会の自己評価に書いています。まず令和7年度 本試験『情報Ⅰ』第3問について。
問1では,条件設定を読み取り,データの種類と意味を理解する力と手作業で解を求める手順を思考する力を問う問題,問2では,与えられた状況を配列で適切に表現する力と繰り返しや条件分岐に対する理解力を問う問題,問3では,求められた出力を得る手順の全体構造を理解し,それをプログラムで表現する力を問う問題とした。
大学入試センター「令和7年度 大学入学共通テスト 問題評価・分析委員会報告書(本試験)『情報Ⅰ』自己評価」
次に令和8年度 本試験『情報Ⅰ』第3問について(関係団体からの評価を引く形)。
「コードを記述する技能だけでなく,図表から規則を抽出して手順に落とし込むこと,状態を配列等で表して保持・更新すること,検証した結果を根拠に判断できるかを問う良問である」(日本情報科教育学会)と評価された。
問題作成に当たっては,令和7年度試験を踏襲し,問1は問題設定の正しい理解を問うための手作業で解を求める問題を,問2は問1で整理したアルゴリズムを基本的なコードで表現する問題を扱った。
大学入試センター「令和8年度 大学入学共通テスト 問題評価・分析委員会報告書(本試験)『情報Ⅰ』自己評価」
2年連続で、第3問の問2は「手で整理したものを配列に落とす」場所だと明言されています。 ここが本講の守備範囲そのものです。重要度Sの根拠は、予備校の分析ではなく出題者本人の文書にあります。
5-2. 出題の3つの型
型1:添字を追わせる。 配列と数行の処理を示し、実行後の配列の状態、あるいは表示される値を答えさせます。トレース表を余白に書けるかどうかで決まります。添字の列を必ず書くこと。
型2:集計処理の穴埋め。 3-7で扱った Kosu[Data[i]] = Kosu[Data[i]] + 1 の形です。空欄になるのは、①内側の添字(何を数えているのか)、②初期化の行、③ループの終端 のいずれかであることが多い。「二重の角括弧のうち、内側は値・外側は箱」と唱えて読みます。
型3:二次元配列の読み取り。 表と対応づけて Ten[i,j] が表のどのマスかを答えさせる、あるいは行・列のどちらを走査しているかを判断させる形。問題文に書かれた添字の意味(1つ目が行か列か、0始まりか1始まりか)を先に丸で囲みます。
配列を実際に動かす場面については、第55講「探索」と第56講「整列」で詳しく扱っています。本講は「配列という道具そのもの」に絞りました。
5-3. 落とし穴
- 「添字」と「何番目」を混ぜる。 添字 i は (i+1) 番目。設問がどちらを聞いているかを必ず確認する。
要素数(Data)と「最後の添字」を同じだと思う。 最後の添字は要素数(Data) - 1。- ループの終端で
-1を落とす/始点を1にする。 境界の1つ外を触るか、先頭を数え落とす。 - 問題文が1始まりを定義しているのに0始まりで解く。 例示は「特に説明がない場合」0始まり。説明があればそちらが正。
- 配列の初期化を忘れる。 度数分布・合計の型では致命傷。例示の
Tokutenのすべての値を0にするを思い出す。 - 二次元配列の添字の順序を逆にする。
Ten[i,j]とTen[j,i]は別物。正方形の表だと黙って間違える。 Data[2][4]と書く。 共通テスト用プログラム表記はカンマ区切りでData[2,4]。- 小文字始まりの名前を配列だと思う。 例示上、配列名は先頭が大文字。逆に大文字始まりを見たら配列を疑う。
- Python の負の添字やスライスを持ち込む。 表記の例示に規定がない。
5-4. 自作の類題(本書オリジナル)
共通テストの問題文・図表・コードは大学入試センターの著作物なので転載しません。同じ力を測るための問題を私が作りました。
問1 Data = [4, 9, 2, 7] のとき、Data[0] + Data[3] はいくつか。また、値9は添字いくつで、先頭から数えて何個目か。
問2 要素数が12の配列 Uriage について、次のうち正しいものをすべて選べ。
(ア) 使える添字は0〜12 (イ) 使える添字は0〜11 (ウ) 要素数(Uriage) は11を返す (エ) 要素数(Uriage) は12を返す (オ) 最後の要素は Uriage[要素数(Uriage)-1]
問3 次の処理を実行した後の Kosu を答えよ。Kosu は最初 [0,0,0,0] である。
Data = [2,0,3,2,2,1]
i を 0 から 5 まで 1 ずつ増やしながら繰り返す:
⎿ Kosu[Data[i]] = Kosu[Data[i]] + 1
問4 2行3列の二次元配列 Hyo があり、Hyo[i,j] は i 行 j 列の値である。次のうち、存在しない要素はどれか。
(ア) Hyo[0,0] (イ) Hyo[1,2] (ウ) Hyo[2,1] (エ) Hyo[0,2]
問5 次のプログラムには誤りが1か所ある。どこか、そして修正するとどうなるか。
Ten = [50,60,70,80]
goukei = 0
i を 0 から 要素数(Ten) まで 1 ずつ増やしながら繰り返す:
⎿ goukei = goukei + Ten[i]
問1 4 + 7 = 11。値9の添字は1で、先頭から2個目(添字と「何個目」が1ずれる)。
問2 (イ)(エ)(オ)。要素数は12だが添字は0〜11。最後の要素の添字は「要素数−1」。
問3 [1, 1, 3, 1]。0が1回、1が1回、2が3回、3が1回。合計6で、データの個数6と一致する。
問4 (ウ)。行は0と1の2つしかないので Hyo[2,1] は存在しない。列は0・1・2の3つあるので (エ) は存在する。
問5 ループの終端。要素数(Ten) は4なので i は0〜4まで動き、最後に存在しない Ten[4] を触る。正しくは 要素数(Ten)-1。修正すると goukei は 50+60+70+80 = 260 になる。
6. 情報Ⅱではこうなる
情報Ⅰの配列は「同じ型の値を一列に並べた箱」です。情報Ⅱでは、この箱の並びが3段階で姿を変えます。一次資料は文部科学省「情報Ⅱ」教員研修用教材 第3章「情報とデータサイエンス」(前半・後半)です。3-3で見たとおり、この教材に「添字」も「要素数」も1件も出てきません。語が消えたのは概念が消えたからではなく、より上の層の名前に置き換わったからです。
6-1. 第1段階:二次元配列 → 表(データフレーム)
学習11「データと関係データベース」に、接続をそのまま述べた一文があります。
RDBは表計算ソフトや2次元配列(行列)のような形をしている。 ヘッダーを付けない場合もあるが,付ける際にはスキーマや格納するデータの型が分かりやすいように付ける。レコード(タプル)は表の行を表し,一つ一つのデータである。属性(カラム)は列を指し,データセットの特徴量(特定の種類)を表す。
文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第3章 前半 学習11(令和2年6月)
情報Ⅰで「行と列」と呼んでいたものが、情報Ⅱでは「レコード(タプル)と属性(カラム)」になり、さらに列が「特徴量」と呼ばれます。 4-4で作った3人×4科目の表を思い出してください。行が3人(レコード)、列が4科目(属性=特徴量)です。情報Ⅱは、この表を分析の単位として扱い始めます。関係データベースそのものの話は第90講「データベースの基礎」と第91講「関係データベースの操作」に書きました。
同じ学習11は、続けてプログラム側の道具を出します。
プログラミング言語では,データベースやデータをそのまま扱うこともできるが,大変面倒である。そのためRやPythonではデータフレームと呼ばれる形でデータを扱う
「データフレーム」という語は、情報Ⅱ教員研修用教材の第3章前半に19件あり、他の分冊(序章・第1章・第2章・第3章後半・第4章・第5章)には0件です。情報Ⅰ教員研修用教材には第4章に1件だけ(R の dplyr の説明)。分水嶺がはっきり出ています。
そしてデータフレームでは、添字が数字ではなくなります。教材はこう書きます。
pandasのデータフレームでは,axis=0で同じ列内のデータ,axis=1で同じ行内のデータを対象に,集約計算やデータ削除の処理を行う。また,インデックスを使って行を指定することができる。
axis=0 と axis=1 は、4-4で「外側のループと内側のループを入れ替える」と言ったものとまったく同じ話です。情報Ⅰでは自分で二重ループを書きました。情報Ⅱでは「どちらの向きに集約するか」を引数1つで指定します。二次元配列の行方向・列方向の理解がないと、この引数の意味が取れません。
6-2. 第2段階:配列の長さ → 「次元」
学習14「主成分分析と次元削減」で、配列の見え方が決定的に変わります。
対象の特徴を表す多変量(高次元)のプロファイルデータから複数の変数をまとめて主成分(特徴量)を作成する方法を理解し,その意義を学習する。
5次元のデータを1次元にするために合計得点が計算され,50人の生徒を合計得点で順位付ける,ということはよく行われている。
同 第3章 前半 学習14
5科目の得点は、情報Ⅰの目には「要素数5の配列」です。情報Ⅱの目には「5次元空間の1点」です。箱が5個並んでいるのではなく、座標軸が5本ある。 合計得点を出す操作は、情報Ⅰでは「配列の要素を全部足す」でしたが、情報Ⅱでは「5次元を1次元に落とす(次元削減)」と呼ばれます。同じ計算に、まったく違う名前がつきます。
教材はさらに、変数の数が増えると人間が対象を捉えられなくなるので、互いに相関しない新しい特徴量に作り替える(主成分分析)と説明します。配列を「長さ」で見ていた人が、「次元」で見るようになる。 これが情報Ⅰと情報Ⅱの最大の段差です。
6-3. 第3段階:画像も文字も、結局は配列になる
学習17「ニューラルネットワークとその仕組み」には、本書が繰り返し引く一文があります。
例えば手書き文字が4か9か認識したいとする。入力は手書き文字画像のピクセルごとのグレースケールの階調を値にして表した配列である。
同 第3章 後半 学習17
情報Ⅱ教員研修用教材の全7分冊で「配列」は3件しかなく、そのうちの1件がここです。 画像は縦横のピクセルが並んだ二次元配列であり、それを一列に伸ばせば長い一次元配列——すなわち高次元のベクトルになります。第34講(画像のデジタル化)で扱った「1画素あたり8ビット=256階調」が、そのまま配列の要素の値になります。
情報Ⅰの配列は「点数を入れる箱」でしたが、情報Ⅱの配列は「対象そのものの表現」になります。 画像も、音も、文章も、いったん配列にしてしまえば同じ手法で扱える。デジタル化が機械学習の前提条件だと言えるのは、この一点によります。情報Ⅱ全体の地図は第109講「情報Ⅱの全体像」にまとめました。
6-4. 情報Ⅰと情報Ⅱの扱いの違い
| 論点 | 情報Ⅰ | 情報Ⅱ |
|---|---|---|
| 呼び名 | 配列(教員研修用教材では「リスト」) | データフレーム/行列/特徴量ベクトル |
| 要素の指定 | 添字(0からの整数) | インデックス(行名)と列名。axis=0 / axis=1 |
| 一次元の意味 | 値が n 個並んでいる | n 次元空間の1点 |
| 二次元の意味 | 行と列のある表 | レコード(タプル)× 属性(カラム=特徴量) |
| 主な操作 | 走査・合計・最大・集計(自分で二重ループを書く) | 結合・集約・欠損値処理・次元削減(関数を呼ぶ) |
| 大きさ | 要素数( ) で得る有限の n | 「高次元」=人間が直接見られない大きさ |
| 目的 | 正しく回すこと | 対象の特徴を掴むこと |
| 一次資料の語数 | 添字16件(情報Ⅰ教材 第3章) | 添字0件・データフレーム19件・特徴量13件 |
情報Ⅰが「配列を正しく回せるようになる」で終わり、情報Ⅱは「配列を対象の表現とみなし、その次元を減らす」ところまで行きます。 第52講は、その最初の一歩です。添字を1つずらして泣くのは、今のうちにしておいたほうがいい。
この講のまとめ
- 変数を並べる方式は、人数が変われば書き直しになり、何より変数名の一部を計算で作れないので反復と組み合わせられない。配列はここを解決する道具である。
- 配列の本質は「添字を変数にできる」こと。だから配列は反復と結婚するための道具である。
- 共通テスト用プログラム表記では、配列名は先頭大文字、添字は特に説明がなければ0から。要素数 n なら添字は 0〜n−1。「添字」と「何番目」は1ずれる。
要素数( )と「最後の添字」は違う数。境界の1つ外を触る off-by-one が最頻の事故。Kosu[Data[i]]のように要素の値が別の配列の添字になる型(度数分布)は頻出。探さずに行き先が決まるので速い。- 二次元配列は
Data[2,4]とカンマ区切りで書く。添字の順序を逆にすると表が転置される。 - 学習指導要領解説の共通教科側に「配列」は0件(2件はいずれも専門教科)。情報Ⅰ教員研修用教材は「リスト」の語で教え、「要素数」はどの国の資料にも0件だった。
- 情報Ⅱでは、配列はデータフレーム(学習11・12)になり、長さは次元(学習14)になり、画像そのものを表す配列(学習17)になる。
出典(すべて2026年8月3日に取得)
- 大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」第5節 共通テスト用プログラム表記の例示(2022年11月9日公表)
- 大学入試センター「令和7年度 大学入学共通テスト 問題評価・分析委員会報告書(本試験)『情報Ⅰ』自己評価」
- 大学入試センター「令和8年度 大学入学共通テスト 問題評価・分析委員会報告書(本試験)『情報Ⅰ』自己評価」
- 文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月
- 文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第1章〜第4章
- 文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」序章・第1章・第2章・第3章前半・第3章後半・第4章・第5章(令和2年6月)
- 文部科学省「高等学校情報科の授業・研修用コンテンツ」
- 情報処理推進機構(IPA)「基本情報技術者試験(レベル2)シラバス」「ITパスポート試験シラバス」
- E. W. Dijkstra, “Why numbering should start at zero”(EWD 831, 1982)
この講の全体像は『藤原進之介の最強120講義』の目次から、シリーズの他の講はカテゴリ「情報Ⅰ 最強120講義」からたどれます。
執筆:藤原進之介(数強塾グループ代表)
オンライン数学専門塾「数強塾」代表。累計3,500名以上の中高一貫校生を指導。東進ハイスクール・東進衛星予備校・代々木ゼミナールなど出講実績あり。情報Ⅰの参考書を複数執筆しており、KADOKAWA『ゼロから始める情報I』、Gakken『きめる!共通テスト 情報Ⅰ』などがあります。本記事は参考書『藤原進之介の最強120講義』第52講のWeb版です。
「情報Ⅰのプログラム問題だけ、どうしても点が取れない」という方へ
数強塾では数学と情報Ⅰの両方に対応したオンライン個別指導を行っています。学習相談は無料、体験授業は3,000円(税込)でお受けしています。
