どうも!リョクちゃです。
あいかわらずのんびりやってます。
前回は、複数値を受け取るには内包表記を使うと便利だということなど紹介しました。
さて、今回はステップアップして、リストの中のリストについて紹介していこうと思います。
ちなみに前回は、こちら
目次
リストの中のリスト……
リストの中のリスト……何を言っているのかわからないかもしれません。
言葉をそのまま解釈すると、
あるリスト変数の中にリスト変数があるといったイメージがわきますね。
コードで書くと、
1 2 3 4 5 |
lstX = ['Apple', 123, ['Dog', 'Egg']] print(lstX) # 出力 # ['Apple', 123, ['Dog', 'Egg']] |
こんなイメージですね。
これをリストの中のリストと呼んでいます。
リスト=1次元の配列?!
皆さんは配列を聞いたことはありますか?
数学もしくはほかの言語を学んでこられた方は聞いたことがあるかもしれません。
Pythonにおいて、配列はリストとして言い換えられますと、
リストについて紹介した際に触れました。
では、ここでPythonにおける配列(=リスト)についてポイントを紹介していきます。
Pythonにおける配列(=リスト)の特徴
- 配列は、自らが次元という単位を持っています。
- 配列において次元とは”深さ”を意味しています。
- 深さを表すために、[](角かっこ)を使います。→この形はリストの形と同じです。
- 配列が2次元以上を有す場合は多次元配列と呼ばれます。
つまり、深さが2以上であれば、多次元配列とみなされます。
ちなみに、最初にリスト編で触れたリスト変数の作り方では、
既に深さ1を持つ、1次元配列を作れるようになっていたのです。
そこで今回は深さ2以上の多次元配列、中でも2次元配列について例を交えて触れます。
※2次元配列→深さ2を持つ配列になります。
→ リストの中のリストが、まさに2次元配列になります。
リストの中のリスト → 2次元配列
イメージだと、下のようになります。
ここで行列という、聞きなれない言葉が出てきましたね。
普段私たちが聞くとしても、おそらく某TV番組ではないでしょうか。
これは数学で使われる言葉で、縦を”列”、横を”行”と表して作られます。
この形こそが、配列であり、2次元配列といわれる形になります。
例で載せたイメージは、3列×3行なので3×3の行列として言うことができます。
この行列を例に、いくつか例題を解いてみましょう。
① 3×3の行列から、真ん中の数字5を取り出してください。
この場合、皆さんならどうしますか?
まずは、下の図をで考えていきましょう。
ここでは、行をX、列をYと置き換えています。
真ん中の5を取り出したいとき、考え方としては、
- 取り出したい値はXがどの値のときか?
- 取り出したい値はYがどの値のときか?
この二つを頼りにやってみましょう。
まず、Xが1のときに5がありますね。
そして、Yが1のときに5があります。
したがって、X=1、Y=1のとき、取り出したい値の5があります。
これを式で表してみると……
5 = (X, Y) = (1, 1) ・・・・・・(1)
と表すことができます。
2次元配列をPythonで表してみる
では、これらをPythonでコードにするにはどうしたらいいでしょうか?
まず、先ほどの行列を分解して考えてみましょう。
といったイメージになります。
1次元に分解することで2次元にする際のイメージがつかみやすくなるかと思います。
これらの分解した1次元の行列を集約したのが2次元の行列となっていきます。
※あくまで筆者の理解になりますので詳しくはどこかで調べてもらえたらなと思います。
では、この分解した1次元の行列をそれぞれリスト変数に入れてみましょう。
こんなイメージで、それぞれリスト変数として作成することができました。
あとはこれらを……
ひとまとめにしていきます。
それぞれの変数から元の値に置き換えると……
これで先ほどの3×3の行列をリストとして表すことができました。
変数New_matで表されたリストの形こそが、2次元配列として表すことができるのです。
ここで、最初の例題で解いた、3×3行列の中にある5を取り出してくださいといった問題を
Pythonで書いていきましょう。どう書くことができるでしょうか?
まず、5を取り出す場合、
それぞれ行と列が1のときであることが先ほどの例題でわかりました。
これを形で表すと、
5 = (1, 1)
と表すことができます。
したがって、これをPythonで書けばよいことになります。
これを表したのが、こちらになります。
1 2 3 4 5 |
lstX = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(lstX[1][1]) # 出力 # 5 |
lstX[1][1]の形が答えになります。
→ 5 = lstX[1][1]
この形は、下のようになります。
“深さ2以上を持つ”リスト変数[行][列]として表すことができます。
このようにして、Pythonで2次元配列を書くことができました。
まとめ
リストの中のリストを表したものを多次元配列呼びます。
Pythonでは、リスト中に含まれる[]の数で深さが決まります。
[]が増えていくほど、より高度な配列になっていき、より複雑になっていきます。
書き方としては、
リスト変数 = [[リスト変数_a], [リスト変数_b], [リスト変数_c]]
おわりに
ざっくりとしすぎてしまったかもしれませんが、
イメージとしてはこんな感じだと思ってます!
筆者自身まだまだ勉強のみではありますが、今回の多次元配列の考え方は、
のちに重要になってくるので、これを機に覚えてもらえたらなと思います。
これを覚えることで、画像処理や機械学習をしていく上での、おそらく基礎となります。
何度も書いて、時に練習問題を解いて学びを深めることをおすすめします。
独学に限界を感じたら、学習サイトを利用するもしくは筆者に聞いてみてください……。