- たくさんの値をまとめて入れる「配列(リスト)」の作り方
- 添字(そえじ)で要素を取り出すやり方 ― 0から数えるのがポイント
- forと組み合わせて、全要素を処理する「走査」
- 合計・最大値さがし・条件に合うものさがし ― 入試の3大パターン
- 配列に書きこむ「記録のパターン」と、となりの要素
[i-1]― 近年の共通テストの本丸
STEP 1値をまとめて入れる ― 配列と添字
5人分の得点を使うプログラムを書くときに tokuten1 = 5、tokuten2 = 7…と5個の変数をつくるのは大変です。配列(Pythonではリストと呼びます)を使うと、tokuten = [5, 7, …] とするだけで、1つの変数にまとめて入れられます。取り出すときは tokuten[0] のように添字(番号)を指定します。番号は1からではなく0から始まることに注意してください。
[0] で取り出されるのがどれか、予想してから実行しましょう。[1] や [2] に変えて試すのもおすすめです。
確認ポイントを見る(実行してから開くこと)
[0] は先頭の「りんご」です。(図1を確認しましょう。)len() は要素の個数(3)を教えてくれる関数で、今回は len(kudamono) = 3 を表します。ちなみに kudamono[3] と指定するとどうなるかは、エラー例1で紹介します。
例題 1
メニューと値段を2つの配列で持つ例です。同じ番号どうしが対応している(1番はパスタと200円)ことに注目してください。
配列 doubutsu から「うさぎ」を添字で取り出して表示する行を書き加えなさい。
解答例を見る(まず自分で書いてから開きましょう)
doubutsu = ['いぬ', 'ねこ', 'うさぎ', 'ハムスター'] print(doubutsu[2])3番目だから
[3]……ではなく [2]。0から数える感覚に慣れていきましょう。
STEP 2全部の要素を順に ― forと配列
配列の真価は、第4章のforと組み合わせたときに発揮されます。for i in range(len(tokuten)): と書くと、i が 0、1、2…と添字を順にたどり、tokuten[i] で全要素を処理できます。これを走査(そうさ)と呼びます。
添字と中身が並んで表示されることを確かめましょう。配列に得点を1つ書き足すと、forの回数も自動で増えることも試してみてください。
例題 2
配列の全要素を合計するプログラムです。第4章の「積み上げパターン」の、足す相手が tokuten[i] になっただけです。
配列の各要素を2倍して表示する行を書き加えなさい。
解答例を見る(まず自分で書いてから開きましょう)
num = [150, 255, 370] for i in range(len(num)): print(num[i] * 2)
num[i] を「1つの数値」として、これまで通り計算に使えるのがポイントです。
STEP 3 一番大きい値 ― 最大値と条件さがし
配列とforとifの3つがそろうと、「いちばん大きい値をさがす」ができるようになります。作戦はこうです——とりあえず先頭を暫定チャンピオンにして、全員と順に比べ、より大きい値が出たらチャンピオンを交代させる。プログラムはこの3つの要素でできています。
このプログラムが動く様子を、開始前から表示まで、最初から最後まで表で追ってみましょう(配列は [72, 95, 88, 61, 99] の5人とします)。チャンピオンが交代するのは、5周のうち2回だけです。
| 周 | tokuten[i] | saikouと比べると | saikou |
|---|---|---|---|
| 開始前 | ― | 先頭を暫定チャンピオンに | 72 |
| 1周目 | 72 | 72 > 72 は成り立たない | 72のまま |
| 2周目 | 95 | 95 > 72 が成り立つ | 95に交代! |
| 3周目 | 88 | 88 > 95 は成り立たない | 95のまま |
| 4周目 | 61 | 61 > 95 は成り立たない | 95のまま |
| 5周目 | 99 | 99 > 95 が成り立つ | 99に交代! |
| 終了後 | ― | forを抜けてprintへ | 99 と表示される |
表からわかる大事なことが2つあります。まず、交代しない周でも、プログラムはちゃんと比べています(何も起きないのは「比べた結果、負けたから」)。そして、2周目で95に交代して決まったように見えても、最後の人までたどるから5周目の99を見のがしません。共通テストのトレース問題は、まさにこの表の1マスを聞いてきます。
上の表とまったく同じ動きを実行して確かめましょう。そのあと、99をいちばん前に動かしても同じ答えになるか、数値を並べ替えたら交代の回数はどう変わるか、いろいろ試してみましょう。
1周ごとに saikou の値を表示しています。交代した周と、しなかった周を見分けながら、上の表と見くらべてみましょう。
例題 3
「条件に合うものだけを表示する」プログラムです。配列の中から3の倍数だけを選び出します(% 3 == 0 は第2章と第3章の合わせ技です)。
今度は最低点をさがします。「より小さい値が出たら交代」になるように、if文の行を書き加えなさい。
解答例を見る(まず自分で書いてから開きましょう)
tokuten = [72, 95, 88, 61]
saitei = tokuten[0]
for i in range(len(tokuten)):
if tokuten[i] < saitei:
saitei = tokuten[i]
print('最低点は', saitei, '点')
不等号の向きを1つ変えるだけで、最大値さがしが最小値さがしに変わります。
STEP 4番号でつながる ― 並行配列
例題1で見た「同じ番号どうしが対応する2つの配列」を、並行配列と呼びます。名前の配列と得点の配列を同じ添字 i でたどれば、「だれが何点か」を組にして扱えます。共通テストのプログラムは、ほぼ毎回この形です(到着時刻の配列と待ち時間の配列、問題番号の配列と分野の配列……)。
1つの i が2つの配列を同時にたどっていることを確かめましょう。
最高得点の人の名前を表示します。最高得点の「番号」を bangou におぼえさせる行を書き加えなさい。
解答例を見る(まず自分で書いてから開きましょう)
namae = ['サクラ', 'ユウタ', 'アオイ']
tokuten = [85, 72, 90]
bangou = 0
for i in range(len(tokuten)):
if tokuten[i] > tokuten[bangou]:
bangou = i
print('最高点は', namae[bangou], 'さん')
値そのものではなく番号(添字)をおぼえておき、最後に並行配列から名前を引く——これは共通テストの記録パターン(2026年追試の Saiyou[i] = c など)そのものです。
STEP 5書きこむ ― 記録のパターン
ここまで配列は「読む」だけでしたが、要素には代入もできます。tokuten[1] = 100 と書けば、1番の箱の中身が書き換わります。共通テストでは、これを使った記録のパターン——0を入れた配列を先に用意しておき、計算した結果をforで書きこんでいく形——が近年の中心です。
代入の前後で、配列の中身が変わることを確かめましょう。書き換える番号や値も変えてみてください。
例題 4
各要素を2倍した値を、別の配列に記録するプログラムです。表示するだけだった「やってみよう5-2」との違い——結果が配列に残るので、あとから何度でも使えます。
もうひとつ大事な技があります。添字の [ ] の中には、数字だけでなく変数や配列の要素も書けます。kaisu[deme[i]] は「deme[i] 番の箱」という意味——「サイコロで3が出たら、3番の箱に1を足す」のように、出た値そのものを添字にして数えることができるのです。
サイコロを6回ふった結果が deme に入っています。それぞれの目が何回出たかを、配列 kaisu に記録していきます(目が3なら kaisu[3] に1を足す)。1回ごとに kaisu の中身を表示してあるので、箱がひとつずつ埋まっていく様子を目で追ってみましょう。deme の数字を変えて、結果がどう変わるかも試してください。
kaisu[deme[i]] は、内側の deme[i] を先に読むのがコツです。deme[i] が3なら kaisu[3]、つまり「3番の箱」という意味になります。出た値そのものが箱の番号になる——この形は演習問題でも出てくるので、上の表示をよく見ておきましょう。
STEP 6となりを見る ― [i-1]の技
添字には計算式も書けます。a[i-1] は「iのひとつ前の要素」。「今日の売上と前日の売上の差」「自分の到着時刻と前の人の到着時刻の比較」のように、となりの要素と組にして使う形は共通テストの定番です。1つだけ注意——先頭の [0] には「前」がいないので、forは range(1, len(a)) と1から始めます。
例題 5
毎日の売上から、前日との増減を計算します。range(1, ...) で添字1(=2日目)から始めているところに注目してください。
体重の記録 kiroku について、前回からの変化(今回−前回)を順に表示する1行を書き加えなさい。
解答例を見る(まず自分で書いてから開きましょう)
kiroku = [50, 52, 51, 54] for i in range(1, len(kiroku)): print(kiroku[i] - kiroku[i-1])もし
range(len(kiroku)) と0から始めると、最初の回で kiroku[-1](Pythonでは「いちばん最後の要素」の意味)を読んでしまい、エラーは出ないのに答えが違うという一番こわいバグになります。「[i-1]を使うforは1から」と覚えましょう。
エラー例 ― よくあるエラーを知ろう!
配列の章の定番エラーを3つ、わざと起こしてみましょう。読み方はいつも通り、いちばん最後の行からです。
エラー例 1 範囲の外の添字
要素は3つ(添字は0・1・2)なのに、[3] を取り出そうとしています。
エラーの読み方を見る(実行してから開くこと)
IndexError: list index out of range と出ます。IndexError(インデックスエラー)は「その番号の箱はありません」という意味です。要素が3つなら添字は0〜2まで。「最後の添字=要素数−1」という関係は、共通テストのループの範囲を考えるときにも効いてきます。
エラー例 2 len() のつけ忘れ
range(len(num)) と書くつもりが、range(num) になっています。
エラーの読み方を見る(実行してから開くこと)
TypeError: 'list' object cannot be interpreted as an integer と出ます。「rangeに入れるのは整数のはずなのに、リストが来た」という意味です。range(len(num)) と直せば、要素数(整数)が渡されて動きます。
エラー例 3 記録用の配列が短い
STEP 5の記録パターンで、kaisu を6個(添字0〜5)しか用意しませんでした。目の「6」が出るとどうなるでしょう。
エラーの読み方を見る(実行してから開くこと)
IndexError: list index out of range です。目は1〜6まで出るので、添字6が使えるように7個(添字0〜6)必要でした。記録パターンでは「記録される値の最大はいくつか → 配列は何個必要か」を最初に確かめるのがコツです。
演習問題
配列の要素を合計し、さらに平均も表示するプログラムを完成させなさい。ヒント:平均は 合計 ÷ 要素数 です。
解答例を見る(まず自分で書いてから開きましょう)
num = [150, 255, 370, 890, 927]
goukei = 0
for i in range(len(num)):
goukei = goukei + num[i]
print('合計は', goukei)
print('平均は', goukei / len(num))
len(num) で割るのがポイントです。要素数を5と直接書くより、あとから配列が増えてもそのまま動く良いプログラムになります。
配列 num = [150, 255, 370, 890, 927] の要素のうち、3の倍数だけを数えて、いくつあるかを表示するプログラムを完成させなさい。ヒント:数えるための変数を0から積み上げます。
解答例を見る(まず自分で書いてから開きましょう)
num = [150, 255, 370, 890, 927]
kosuu = 0
for i in range(len(num)):
if num[i] % 3 == 0:
kosuu = kosuu + 1
print('3の倍数は', kosuu, '個')
「条件に合ったら + 1」で数える——このカウントパターンは、2026年追試(分野ごとの採用問題数を数える Mondaisu[b] = Mondaisu[b] + 1)でそのまま出題されました。
1週間の最高気温の配列から、いちばん高い気温をさがして表示するプログラムを自分で考えて作りなさい(「暫定チャンピオン交代方式」をゼロから書いてみましょう)。
解答例を見る(まず自分で書いてから開きましょう)
kion = [28, 31, 34, 30, 27, 33, 29]
saikou = kion[0]
for i in range(len(kion)):
if kion[i] > saikou:
saikou = kion[i]
print('今週の最高気温は', saikou, '度')
これがゼロから書けたら、共通テストの最大値問題の空欄は得点源です。
文化祭の売店の売上を計算します。値段の配列と売れた個数の配列(並行配列)から、売上の合計金額を求めるプログラムを自分で考えて作りなさい。ヒント:i番の売上は 値段[i] × 個数[i] です。
解答例を見る(まず自分で書いてから開きましょう)
nedan = [150, 200, 250]
kosuu = [20, 30, 16]
uriage = 0
for i in range(len(nedan)):
uriage = uriage + nedan[i] * kosuu[i]
print('売上の合計は', uriage, '円')
並行配列×積み上げの合わせ技です。2026年本試の待ち行列計算も、複数の配列を同じ i でたどるこの形でした。ここまで書けたら、共通テストのプログラムの骨組みはもう読めます。
生徒6人の所属クラス(0組・1組・2組)が配列 kumi に入っています。各クラスの人数を配列 ninzu に記録する1行を書き加えなさい(STEP 5の記録パターンです)。
解答例を見る(まず自分で書いてから開きましょう)
kumi = [1, 0, 2, 1, 1, 0] ninzu = [0, 0, 0] for i in range(len(kumi)): ninzu[kumi[i]] = ninzu[kumi[i]] + 1 print(ninzu)STEP 5のサイコロと同じ形だと気づけたでしょうか。「集計表を配列で作る」——この1行が書ければ、記録のパターンは卒業です。
自由実行スペース
思いついたことを自由に試すための場所です。自分の1週間の勉強時間を配列にして、合計や最高記録を求めてみるのもおすすめです。
Tokuten = [80, 92, 67] のように大文字で始まる名前で書かれ、要素数は 要素数(Tokuten) という関数で取る。Pythonの len() と同じ働きだ。