小学生でも分かるくらい丁寧なPythonプログラミング - [list] / index[n]
← preview
next →
< class 'list' >
>> list = 列挙する / 一覧表(リスト)
〔 list ( リスト) 〕
前回、オブジェクト(値)の「型」というものを紹介しました。
これから紹介する「 list(リスト) 」も
具体的なひとまとまりの値...
つまり「 オブジェクト 」として
Pythonが識別することができるものです。
「 オブジェクト 」として識別できるということは
「 オブジェクトID 」が割り当てられているということ。
そして「 変数に代入できる 」ということでしたね。
( 変数に代入されているのは
「オブジェクトそのもの」じゃなくて、
「オブジェクトID」だということをお忘れなきよう。)
まずはその「 list(リスト) 」なるものを
実際に見てみましょう。👇
リスト名(変数名) = [ 値①, 値②, 値③, ... ]
👆このような記述の仕方をします。
値と値は必ず「カンマ( , )」を使って区切ります。
>> reference = 参照
<< 重 要 >>
何の定義も無しに
「 print( oppai ) 」を実行するとエラーになりますよね。
これは、「変数はオブジェクトではない」
ということを示しています。
「 print( 123 ) 」のように、
具体的な数値である「 123 」が書かれた瞬間に
オブジェクトが生成された事になります。
そして、オブジェクトには「 オブジェクトID 」がある。
変数とは、その「 オブジェクトID 」を
預かって管理しているだけの存在なのです。
その事を踏まえた上で、リストの構造についてお話しします。
「 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 です。
[ ] ← これのことをブラケット( bracket )
あるいは角括弧、大括弧、
箱パーレン、スクエアブラケットと呼ぶそうなので
以降、[ ]←これ自体のことを [ブラケット] と表記します。
>> empty_list = 空リスト
[ブラケット]が入力された時点で
Pythonは「これはlist型のオブジェクトだ」と識別します。
これを活かして中身の無い「 空リスト 」というものを
作成することがあります。
何のために使うかというと、
後からそこに値を追加していくためです。
その時になったらまた説明しますが
先に覚えておきましょう。
>> storing_data = データを格納
「 list(リスト) 」にはどのような値が格納できるのでしょうか?
「 list(リスト) 」の使い勝手の良さを証明するために
このようなコードを書いてみました。👇
「カンマ( , )」を使って値を区切っているおかげで
異なる型のオブジェクトを
同じリストに格納したとしても大丈夫なのですね。
また、リストに何が格納されていても、
「 一つのlist型のオブジェクト 」として認識されるので
一つの変数に代入することができるのです。
これはめっちゃ便利だな。
>> list_name[n] = リストの値の取り出し
例えば、
「 color_list = [ "Red", "Blue", "Green", "Yellow" ] 」
のようなリストがあったとしましょう。
リスト全体を取り出したければ
「 print( color_list ) 」だけでいいのですが、
「 "Blue" だけを取り出したいな 」
と思うこともありますよね。
そのような場合にはどうしたらいいでしょうか?
答えはこうです。👇
「 color_list[1] 」のような記述をしてやれば
特定の値だけを取り出すことができます。
......え?
「間違ってね????」と思いませんでしたか?
「 color_list[2] 」が「 Blue 」じゃないんけ???と。
だってそうですよね?
自然数について説明したとき、
"""
普通、人を数える時は「0人、1人、2人、3人...」
なんて数え方はしませんよね?
「1人、2人、3人...」のように「1」から数え始めるのが
物の数え方として自然ですよね。
"""
って言ってたじゃないか!!!
話が違うぞ!!!!こんな記事やめちまえ!!!!と。
>> index = 索引 / 指数
〔 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の都合が理由のようです。
あまり伝統の事とか専門的な事については書けないのですが、
どうしても腑に落ちたい人はこう考えたらよいでしょう。👇
(少々哲学的な余談なので読み飛ばしてもらって結構です)
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番目の要素 である。
次の記事へ。