こんにちわ!このサイトではPythonの初学者のための内容となっております。
前回の記事では、大量のデータを扱うのに便利な配列について学習しました。
前回の記事
今回は、より配列について理解するために、前回よりも複雑な内容となっております。
また、2重ループ文の書き方も紹介するのできっとためになります!
たのしみですねぇ~!頑張りましょう!
コンテンツ
プログラミングスクールに関しては下の記事で詳しく記述しています。
こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。
Let’s practice a little!!
配列の確認
今日の内容を学習する前に少し配列の復習をしよう!
前回の内容でも少し難しかったゾ!
ということで配列の再確認です。重要なのは、
- 配列の要素番号は「0」から始まる。
- 配列の要素数は「len」関数で求めることが出来る。
では、実際の記述例を見てみましょう。
1 2 3 4 5 6 7 8 9 |
a = [10, 20, 30, 40, 50] print(a[0]) #10 print(len(a)) #5 print(a[len(a) - 1]) #50 |
ここまでを踏まえて今日の内容を見ていきましょう。
2重配列について
プログラミングを行うにあたって1次元配列ではどうもコードを記述するのが微妙だなと感じたことはないでしょうか?
例えば、生徒が3人いて、5科目のテストの点数を用いて処理を行うときや、
複数の配列を一つにまとめたいときなどです。
別々の配列を1つずつ似たような処理を施すのは効率が悪くなりますし、
読みづらいですのでこういった問題を解決するためにも2重配列などの多次元配列を学習しましょう!
多次元配列!かっこいい!
先ほどの例では2重配列を用いると便利だね!
実際にコードを書いていこう!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#生徒が3人、5科目の点数を定義 scores = [[60, 70, 80, 90, 100], #1人目 [50, 60, 70, 80, 90], #2人目 [40, 50, 60, 70, 80]] #3人目 print(scores[2][4]) #80 print(len(scores)) #3 print(len(scores[0])) #5 |
これは、2次元配列を用いて各生徒の点数を列挙しています。
括弧の数にも注意してくださいね。
2次元配列の場合、Excelなどの表を思い浮かべるとわかりやすいと思います。
イメージとしては、縦、横のセル(ますの一つ一つ)にそれぞれ値が格納されている感じです。
2次元配列はそんなに難しくないね!
そうだね!それではこの配列の扱い方を見ていこう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
a = [1, 2, 3] b = [4, 5, 6] print(a + b) #2つの配列を一つにまとめる #[1, 2, 3, 4, 5, 6] l = [] #空の配列を用意 l.append(a) l.append(b) print(l) #[[1, 2, 3], [4, 5, 6]] print(l[1][1]) #5 |
なるほど!「append」関数でデータを追加できるんだね!
うむ!よくわかってるね!
案外簡単に扱えることがわかってくれたかな?
配列の要素を追加したり、削除したり、コピーしたりできることはたくさんあるのですが、この記事では初心者のための基本的な使い方を学ぶためのものですのでよく使うものを記述しました。
次にこの配列の扱い方を説明していきたいと思います。
Let’s practice more!!
2重配列のすべての要素の参照
まずは、先ほどの例の、生徒が3人いて、5科目のテストの点数の合計を求めるプログラムを見ていきましょう!
1 2 3 4 5 6 7 8 9 10 11 |
score = 0 #合計点を求めるための変数 scores = [[60, 70, 80, 90, 100], #1人目 [50, 60, 70, 80, 90], #2人目 [40, 50, 60, 70, 80]] #3人目 for h in range(len(scores)): for w in range(len(scores[0])): score = score + scores[h][w] print(score) #1050 |
うん!ちょっと複雑になってるけど今まででの内容通りだね!
そうなんだよ!2重ループ処理を行っているけどやってることは同じ!
要素番号は「0」から始まって要素の数だけループさせてるだけなの!
拡張「for」文と配列
先ほど例では、2重配列の要素を一つずつ参照して合計を求めていますが、もっと簡単な方法もあります。
配列の合計を求めるのは「sum」関数を使えば計算できるのですが、1次元配列でしか使えません。
そこで、2重配列を1つの行ずつ参照していくようにして簡単に合計を求めてみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
score = 0 scores = [[60, 70, 80, 90, 100], #1人目 [50, 60, 70, 80, 90], #2人目 [40, 50, 60, 70, 80]] #3人目 for person in scores: print(person) score += sum(person) print(score) """ [60, 70, 80, 90, 100] [50, 60, 70, 80, 90] [40, 50, 60, 70, 80] 1050 """ |
どうでしょうか?2重for文よりもすっきりして見えませんか?
この書き方は拡張for文と呼ばれる方法で記述しています。
「person」の変数には、1行ずつ参照された値が格納されているのがわかりますね。
拡張for文はなれないとわかりずらいと感じてしまう方もいらっしゃるかもしれませんが
この書き方でプログラムを組むと楽で見やすくなります!
Today’s final practice!!
まとめ
ここまで読んでいただきありがとうございます!
今回は、2次元配列と拡張「for」文についての記述でした。
どちらも頻出の構文なのでぜひともマスターしたい内容となっています。
次回は、今回の配列の定義の仕方と、その方法によってどのように処理速度が変わってくるのかについても記述していますので確認してみてください!
本日の理解度調査
今日の最後に理解度調査をします!!
どうすれば正しくなるのか考えてみてね!!
Q.問題 : 配列aに配列bの値を10倍したものを1次元配列として格納せよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
a = [] b = [[1, 2, 3], [4, 5], [6], [7, 8], [9, 0, 1]] for i in b: for j in range(???): #ここに入れる式はなにかな? x = ??? #ここに入れる式はなにかな? a.append(x) print(a) #[10, 20, 30, 40, 50, 60, 70, 80, 90, 0, 10] |
正解は。。。
1 2 3 4 |
for i in b: for j in range(len(i)): x = i[j] * 10 a.append(x) |
わかったかな??正解出来たら今回の項目は完璧だね!!