タプル設定。タプルは変更不可の一括管理コンテナ

この記事は個人の実行記録Noteです。個人的な経験からPythonの基本を初心の方向けに紹介します。

§ プログラミング >変数と演算 >タプル


 複数のデータを一括管理するのをコンテナと云う。タプルは作成したら中に収めたデータを書き変えることが出来いコンテナです。 タプルの書式はカッコ:() で挟まれたカンマ区切りの複数要素で作られます。単純な要素羅列レベルの場合はカッコ:() は省略可能となる。カッコが省略されると、タプルを意識しないで使用されていることが多い。初期値設定などに使用され、関数やクラスの引数もタプルで引き渡されているらしい。

*タプルの作成方法

カッコ()で挟まれ、複数の値をカンマ”,” 区切りでの列記がタプルになる。【表1参照】

・要素が空の場合: 空タプルを作成。要素の追加前の空タプルとして使用可能。
・要素1つ(+カンマ)の場合: 要素が1つの時はタプルにしたい場合は、次のカンマ付きにする。カッコ()で挟んだだけでは通常の変数として扱われ、タプルにならない。
・複数の数値の場合: タプルの要素を数値に出来る。
・複数の文字列の場合: タプルの要素を文字列に出来る。
・複数の論理型変数の場合: タプルの要素を論理型に出来る。
・変数型の混合の場合: タプルの要素は数値、文字列、論理型などを混合に出来る。
・複数の()省略の場合: タプルは()が省略可能。要素の列記はタプルと認識される。
・要素がタプルの場合: タプルの要素をまたタプルとすることも可能。
・コンテナ混合の場合: タプルの要素をタプルとリストの混合に出来る。
・リストの変換の場合: tuple()でリストをタプルに変換できる。
・range関数の変換の場合: tuple()でrange()関数からタプルに変換できる。
・内包表記で設定の場合: tuple()で内包表記をタプルに変換できる。
・+,*を使っての場合: +は結合式、*は繰り返し式として使用できる。

*タプルに格納されたデータの参照方法

 タプルに格納されたデータを参照するには参照するデータの最初からの位置を指定する。 位置は0番目を最初の値、データの数より1少ない数を最後の番として、位置数値を鍵カッコ[ ]で指定して、タプルの直後に付ける。【表2参照】

・位置を指定: 0から(データ数-1)までの数。データ数またはそれ以上の数はエラーになる。
・マイナス位置を指定: -1から -(データ数)までの数。タプルの後ろからの順番で指定できる。 こちらは マイナスのデータ数(0番目)まで可能。マイナスのデータ数より小さい数はエラーになる。 (マイナス値+データ数)番目の指定と考えた方が良い。
・範囲(始:終)を指定: 開始値番目から、(終わり値-1)番目までを抽出できる。
・範囲の終を省略 : 開始値番目から最後までを抽出できる。
・範囲の始を省略 : 0番目から(終わり値-1)番目までを抽出できる。
・始:終:step を指定: 開始値番目を最初にして、step値飛ばしで(終わり値-1)番目までを抽出。 ただし、終わり値番目は含まれない。
・タプル内タプルを指定: 入れ子になっている場合は、位置指定を2回行う。

*タプルの要素変更はエラーになるが、エラーにならない変更もある。

 タプルは要素の値を変更出来ないコンテナです。別のタイプのコンテナ(例えばリスト)で可能な要素の変更コマンドを実行するとほとんどがエラーとなる。しかし、一部の変更コードについてはエラーにならないで実行が可能となります。 実行可能かどうかの判断は、タプルのidをみるとわかってくるようです。 以下の表4でタプルのidの挙動を確認します。.append() と .remove() のコマンドでは、idが変化していないところが注目点。

 ・タプルの*=式による繰り返し: タプルが拡張された様に見える。実態は、まったく新しいタプルを同じ変数名で作った場合と同じ、新しいidとなる。
 ・タプルの+=式による結合: タプルに要素が追加された様に見える。実態は、まったく新しいタプルを同じ変数名で作った場合と同じ、新しいidとなる。
 ・タプル内のリストの中に要素を追加: タプル内のリストについて、リストのメソッドで要素の追加が可能。 タプルのidは同じままである。 
・タプル内のリストの中の要素を削除: タプル内のリストについて、リストのメソッドで要素の削除が可能。 タプルのidは同じままである。

  タプル全体を新しく設定すると、タプル自体のidが変化する。タプル内の要素だけを変える場合は、要素データのidが変化してエラーとなる。ただし、タプル内のリストはリストメソッドであってリストのidが変わらない場合は、タプルに変化はないと見做されるので可能。 タプル内のタプルやリストに対する*=演算、+=演算はリストのidは変化しないがエラーとなる。 *=、+=は、idが変化する演算処理が途中で入っていると思われる。idの変化を意識すれば、タプルを一部変更するのは可能だが、面倒を感じる。やはりタプルの要素は変えない、とした方がいいだろう。

【独り言】 ● id (アドレス)
 idはメモリー空間のアドレスである(正式書面で確認していません)。 PC内で、変数はidアドレスの位置に保管されている。変数によって必要とされるメモリー量は異なる。変数が変われば、その変数に対するメモリの使用量を変動させる必要がある。変数を決めた時にメモリーのサイズを固定すれば、変数のメモリー量に変動がなく内部での処理が減る。処理が減ると効率的になり処理速度も速くなる。


〇 関連する公開記事

 ・関連記事: 定数と変数、リスト(コンテナ) そして、変数名と予約語

 ・前の記事: 論理型変数と論理演算子(bool代数)

 ・紹介記事: 代入・算術・複合そして比較の演算子


〆後書

 タプルとリストの2つは似ている。リストの方が出来ることが多い。タプルは変更できない情報を記載するためにあるとの説明がよくあるが、全体変更が可能なのだから、部分変更出来ないことの意味は薄いように思われる。何のためにタプルがあるのか良く分からない。予想は、多機能なリストよりも要素を列記するだけのタプルの方が、省メモリで高速処理できるように考えてあるのではないか(間違っているかもしれない)。

 それにしても、タプルだと思っていたらリストだったり、リストだと思ってメソッドを付与したらタプルでNGだったりすることが多い。( )や[ ]の位置や数には相変わらずエラーを繰り返している。


IG.Python Note

PythonプログラミングのためのTips集です。 趣味のPythonプログラミングをしていると、必要なプログラミング情報を自分で取集することが必要になります。 集めた情報を整理しておくと便利なので、個人的な学習メモとして記録を作りました。

0コメント

  • 1000 / 1000