見出し画像

小学生でも分かるくらい丁寧なPythonプログラミング - [list] / index[n]

← preview

next →

< class 'list' >

list.

>> list = 列挙する / 一覧表(リスト)

〔 list ( リスト) 〕

前回、オブジェクト(値)の「型」というものを紹介しました。

これから紹介する「 list(リスト) 」も
具体的なひとまとまりの値...

つまり「 オブジェクト 」として
Pythonが識別することができるものです

「 オブジェクト として識別できるということは
「 オブジェクトID が割り当てられているということ。
そして「 変数に代入できる 」ということでしたね。

( 変数に代入されているのは
「オブジェクトそのもの」じゃなくて、
「オブジェクトID」だということをお忘れなきよう。)

まずはその「 list(リスト) 」なるものを
実際に見てみましょう。👇

list_name = [v1, v2, v3, ...]

リスト名(変数名) = [ 値①, 値②, 値③, ... ]

👆このような記述の仕方をします。

値と値は必ず「カンマ( , )」を使って区切ります。


>> reference = 参照

reference.

<< 重 要 >> 

何の定義も無しに
「 print( oppai ) 」を実行するとエラーになりますよね。

これは、「変数はオブジェクトではない」
ということを示しています。

「 print( 123 ) 」のように、
具体的な数値である「 123 」が書かれた瞬間に
オブジェクトが生成された事になります。

そして、オブジェクトには「 オブジェクトID 」がある。

変数とは、その「 オブジェクトID 」を
預かって管理しているだけの存在なのです。

その事を踏まえた上で、リストの構造についてお話しします。

int型のオブジェクトを変数に代入してから
リストに格納してみました。


 0,1,2 」は「 具体的な数値等 」に該当します
つまり、一つひとつが「 オブジェクト 」。

もっと言うと「 int型のオブジェクト 」ですよね。
それぞれに識別するための「 オブジェクトID 」があります。

a = 0
b = 1
c = 2

👆これは、

「 a,b,c 」という「 変数 」に
「 0,1,2 」の「 オブジェクトID 」を預けている状態です。

「 print( a ) 」のように「 a,b,c 」を呼び出した時は、
「 0,1,2 」の「 オブジェクトID 」が参照されます

変数にはオブジェクトIDがないんだからそうなるよね。


[ ] 

👆

「 [ ] (リスト) 」自体が具体的な数値等に該当します。

もっと詳しく言うと「 list型のオブジェクト 」ですね。
「 print( type( [ ] ) ) 」を実行すると
「 < class 'list' > 」と表示されますからね。

「 [ ] 」自体が「 list型のオブジェクト 」ということは
もし中身が空っぽでも問題ないということです。

オブジェクトID
を持っているわけなので、
[ ] ←これだけ書いて実行してもエラーにはなりません
(何も表示されないけど)

[ ]

[a,b,c]

👆これは

「 0,1,2 」の「 オブジェクトID 」を預かっている
「 a,b,c 」をリストに格納している状態です。

これも「 list型のオブジェクト 」であって、
専用のオブジェクトIDがあります。


abc_list = [a,b,c]

👆これは

「 abc_list 」という名の「 箱(リスト名) 」に
「 [a,b,c] 」自体の「 オブジェクトID 」が入っている状態。


abc_list を呼び出した時に参照されるのは、
「 [a,b,c] のオブジェクトID です。

abc_list = [a,b,c]


[ ] ← これのことをブラケット( bracket )
あるいは角括弧、大括弧、
箱パーレン、スクエアブラケット
と呼ぶそうなので

以降、[ ]←これ自体のことを [ブラケット] と表記します。


>> empty_list = 空リスト

empty_boxes.

[ブラケット]が入力された時点で
Pythonは「これはlist型のオブジェクトだ」と識別します。

これを活かして中身の無い「 空リスト 」というものを
作成することがあります。

何のために使うかというと、
後からそこに値を追加していくためです。

その時になったらまた説明しますが
先に覚えておきましょう。

empty_list = [ ]

>> storing_data = データを格納

storing_data.

「 list(リスト) 」にはどのような値が格納できるのでしょうか?

「 list(リスト) 」の使い勝手の良さを証明するために
このようなコードを書いてみました。👇

これまでに学んだ様々な型のオブジェクトが格納されている。

カンマ( , )」を使って値を区切っているおかげで
異なる型のオブジェクト
同じリストに格納したとしても大丈夫なのですね。

また、リストに何が格納されていても、
「 一つのlist型のオブジェクト 」として認識されるので
一つの変数に代入することができる
のです。

これはめっちゃ便利だな。


>> list_name[n] = リストの値の取り出し

Bad ending :(

例えば、

「 color_list = [ "Red", "Blue", "Green", "Yellow" ] 

のようなリストがあったとしましょう。

リスト全体を取り出したければ
「 print( color_list ) 」だけでいいのですが、

 "Blue" だけを取り出したいな 
と思うこともありますよね。

そのような場合にはどうしたらいいでしょうか?

答えはこうです。👇

list_name[n]

 color_list[1] 」のような記述をしてやれば
特定の値だけを取り出すことができます

......え?

「間違ってね????」と思いませんでしたか?

「 color_list[2] 」が「 Blue 」じゃないんけ???と。

だってそうですよね?

自然数について説明したとき、

"""
普通、人を数える時は「0人、1人、2人、3人...」
なんて数え方はしませんよね?
「1人、2人、3人...」のように「1」から数え始めるのが
物の数え方として自然ですよね。
"""

って言ってたじゃないか!!!
話が違うぞ!!!!こんな記事やめちまえ!!!!と。


>> index = 索引 / 指数

alphabetic organizer.

〔 index ( インデックス ) 〕

 list_name[n] 」の「 [n] 」を
「 index(インデックス)番号 」と呼びます。

index(インデックス)番号は「 [0] 」から始まります。

index[0] = リストの最初(左)から「1」番目の要素
index[1] = リストの最初(左)から「2」番目の要素
index[2] = リストの最初(左)から「3」番目の要素
...

ややこしいですね。

index[n] = 左から「n+1」番目の要素
と意識しなければなりません。

結構ウッカリ間違えるので、
失敗を繰り返しながら覚えていきましょう。

また、index[-1]のようなマイナスindex番号は、

リストの順番を「逆(右から)」にする
ことを示しています。

index[-1] = リストの最後(右)から「1」番目の要素
index[-2] = リストの最後(右)から「2」番目の要素
index[-3] = リストの最後(右)から「3」番目の要素
...

ややこしいな。

でも、index[0]と書かれた時に
何も出てこないよりマシですよね。

実際にコードを書いてみましょう。

これは慣れるしかねえな。

「なぜ index[0] から始まるのか?」って思いますよね。

僕はその理由を考えました。

結論を言ってしまうと
理由が分かったところでどうしようもない。仕様だから慣れて。
という話になりますが...

これはプログラミング界の伝統とCPUの都合が理由のようです。

あまり伝統の事とか専門的な事については書けないのですが、
どうしても腑に落ちたい人はこう考えたらよいでしょう。👇

(少々哲学的な余談なので読み飛ばしてもらって結構です)

reservation.

list型オブジェクトのような配列が入力された時に、
CPU各オブジェクトIDを格納&管理するために
メモリのとある領域を確保します


ちょうど我々人類が、4人で食事したい時に
店のカウンター席を4席予約して確保するようにね。

人間世界ではカウンター席を「1番」や「2番」などと
自然数の番号によって管理している事がありますよね。

なんで「0番」が無いのかって、
0」ってのは我々人間からすれば
何もない状態を表す数字だからですけれど。

PythonもといCPUの中には
そういう「自然数」なんて概念は無いですはずよね。

(教えりゃいいだけのことですが)

一方CPUは「0」と「1」だけを使って
モノの数を数えていくわけですけれど...

「0」を、我々が思ってる
「0 = 何もない」
という意味で捉えずに、

「0 = "何もない"が1つある」
と捉えているとするならば、

その「0」を使って1つのものを
カウントできるはずなんですよね。

ちょっと色んな方面から怒られるかもしれないんで
適当な事書くのはこの辺にしときます。


「index[1]」を1個目の要素にしろ!!!
という意見もあるそうですよ。
使い勝手が良さそうに見えますもんね。

その場合「index[0]」の
処遇を決めなければならないので
素直に面倒だなと思います。
エラーを返すのか、どうするのか。

近々記事にする「for文」を
使うときなども困るでしょうね。

そのうち「なんでindex[0]だけエラーなんだ!」
という声も聞こえてくるかもしれません。

そういう「仕様」をどうするかについては
「Python制作者次第」というわけで、
我々は、その仕様を覚えるしかないですよ。

Python制作者も簡単に変えるわけにはいきませんよね。
「index[0] = 1個目の要素」として書かれた
Pythonプログラムだって世の中にたくさんあるわけですし。

それらを全部書き直すくらいなら
我々が諦めて覚えた方がよさそうです。


まとめ

● list型オブジェクトは、 [ブラケット] が書かれた時点で生成される。

● リスト内の値(value)カンマ( , )で区切る。 ( 例 : [ v1, v2, v3 ] )

● list_name = [ v1, v2, v3 ] リストから値を取り出すときは、
 list_name[n] 」の形で index番号 を付ける。

(※ 要素数が3として、index[2]超える数を入れるとエラーになる。)

● index[0] は、リストの左から1番目の要素 である。

● index[-1] は、リストの右から1番目の要素 
である。


次の記事へ。

この記事が気に入ったらサポートをしてみませんか?