Python入門
第10回.タプル(tuple型、イミュータブル)

Pythonの初心者向け入門解説、人気のプログラミング言語Python
最終更新日:2020-09-22

第10回.タプル(tuple型、イミュータブル)


プログラミングにおいて覚えなければならないものとして配列があります。
Pythonの組み込み型に、リスト(list型)とタプル(tuple型)があります。
今回はタプル(tuple型)について解説します。


リスト(list型)が良く分からない場合は、先にリスト(list型)を覚えてください。
第9回.リスト(list型、配列)
プログラミングにおいて覚えなければならないものとして配列があります。Pythonの組み込み型に、リスト(list型)とタプル(tuple型)があります。今回はリスト(list型)について解説します。目次 リスト(list型)とは リスト演算子 リストのインデックスとスライス スライスでリストの値を変更 スライスでリストの要素を追加 del文リストの要素を…
以下では、リスト型との相違点に重点を置いた解説をします。

目次

タプル(tuple型)とは

Pythonの配列を扱うデータ型にtuple型があります。
公式ドキュメント - タプル型
リスト(list型)との重要な違いは、
・リストはミュータブル(変更可能)なデータ型
・タプルはイミュータブル(変更不可)なデータ型
つまりオブジェクトの値を変更できるかどうかの違いです。
これについては、次の節で詳しく説明します。

変更できないという点以外では大きな違いは括弧の違いになります。
・リストは、[]角括弧で作成
・タプルは、()丸括弧で作成

Python tuple ミュータブル イミュータブル
要素が1つの場合は、(値,)、このようにカンマを1つ付けなければなりません。
要素数が0の空タプルは、()だけにすることで作成できます。

()括弧を省略したり,カンマで終わるとタプルになります。

エクセル Excel サンプル画像
type()は組み込み関数です。
type()関数は、引数が1つだけの場合はobject の型を返します。
第12回.組み込み関数一覧
Pythonには数多くの関数と型が組み込まれており、様々な処理を行うことができます。組み込み関数は、Python入門の中でもすでにいくつか使用していますし、これからも頻繁に使用していきます。全部で69個あります。

タプルの入れ子による多段階配列の作成

タプルの要素(値)には、さらにタプルを入れることができるので、階層を持ったデータ構造を作成できます。

Python tuple ミュータブル イミュータブル

ミュータブルとイミュータブル

Pythonのデータ型には、ミュータブル(mutable)イミュータブル(immutable)があります。
ミュータブルは、オブジェクトの値そのものを変更できるオブジェクトです。
イミュータブルは、オブジェクトの値そのものは変更できないオブジェクトです。

ミュータブルのオブジェクト:list,dict,set
イミュータブルのオブジェクト:bool,int,float,complex,str,tuple,range
※全部ではありません、既出および近い回で説明する型だけです。

ミュータブルのlistでは、その値の一部を変更することが出来ました。

Python tuple ミュータブル イミュータブル
しかし、イミュータブルのtupleでは値を変更することはできません。

Python tuple ミュータブル イミュータブル
では、次の例ではどうでしょうか。

Python tuple ミュータブル イミュータブル
変更できないはずのtupleが違う値に変更出来ています。
しかしこれは、変数を新たに作成し直しているにすぎません。

変数が箱だとするなら、元の箱は破棄して新しい箱を用意したという事です。
変数にはそれを識別するid(識別値)があります。
識別値は、id()関数で取得できます。
id()関数は、
オブジェクトの識別値(アドレス)を返します。
識別値は整数で、そのオブジェクトの有効期間中は一意かつ定数であることが保証されています。
有効期間が重ならない(同時に存在しない)2 つのオブジェクトは同じ id()値を持つ事はありえます。
Python tuple ミュータブル イミュータブル
このように、id(識別値)が違うという事は別の変数だという事です。
これに対して、listの値を変更した場合は、

Python tuple ミュータブル イミュータブル
このように同じid(識別値)で中の値が変更されています。
これは、listのメソッド(appendやsort)を実行した場合も同じです。
ただし、ミュータブルのlistでも変数に再代入した場合は別のid(識別子)になります。

Python tuple ミュータブル イミュータブル

イミュータブルのtupleでも要素のオブジェクトの値は変更できてしまいます。

Python tuple ミュータブル イミュータブル

タプルの1つの要素としていれたリストの値は変更できてしまいます。
id(識別子)も同じままになります。


タプル演算子

+演算子

+演算子は、2つのリストを連結します。

Python tuple ミュータブル イミュータブル

+=の累算代入演算子も同様に適用できます。

Python tuple ミュータブル イミュータブル

*演算子

*演算子は、*の後ろに書いた数だけリストを複製します。

Python tuple ミュータブル イミュータブル

inとnot in

inとnot inは、コンテナオブジェクトに対して、左辺の値が右辺の要素に含まれているかどうかを判定します。

左辺の文字列が右辺のタプルに含まれるかどうかを評価します。
inは、含まれていればTrue
not inは、含まれていなければTrue

Python tuple ミュータブル イミュータブル
大文字小文字が区別されます。


list()関数とtuple()関数

list()関数は、引数のlist,tuple,rangeをlist型に変換して返します。
tuple()関数は、引数のlist,tuple,rangeをtuole型に変換して返します。
第12回.組み込み関数一覧
Pythonには数多くの関数と型が組み込まれており、様々な処理を行うことができます。組み込み関数は、Python入門の中でもすでにいくつか使用していますし、これからも頻繁に使用していきます。全部で69個あります。

Python tuple ミュータブル イミュータブル


タプルのインデックスとスライス

タプルのインデックス

インデックスは先頭が0から始まります。

Python VBA    GAS    C++    C#    
0 1 2 3 4
-5 -4 -3 -2 -1

タプル変数[index]

これで、指定したインデックスの位置の要素(値)を取得することができます。

Python tuple ミュータブル イミュータブル
インデックスの範囲外を取得しようとするとエラーになります。

タプルのスライス

シーケンス(文字列、リスト、タプル等)から部分的に取得することをスライスと呼びます。
スライスの指定は、
タプル変数[start:stop]
タプル変数[start:stop:step]

startからstop-1(stopの1つ前)までが取得されます。
スライスでは、stopにはリストの要素数(最大インデックス+1)以上が指定できます。
stepは飛び飛びで取得する場合に使用します。

Python tuple ミュータブル イミュータブル
stop-1つまりstopの1つ手前までが範囲になる点に注意してください。
インデックス範囲外の数値を指定してもエラーにならず、有効な範囲内の要素が取得されます。


タプルのアンパック

複数代入の書き方と同じ書き方で、タプルの複数の要素を一度に複数の変数に入れることができます。
タプルを展開して複数の変数に代入することをアンパックと言います。

アンパックの対象は、タプル全体でも良いしスライスでも構いません。
ただし、左辺の変数の数と右辺のタプルの要素数は一致している必要があります。
一致していない場合はエラーになります。

Python tuple ミュータブル イミュータブル
f'またはf"については、文字列操作f-string(フォーマット済み文字列リテラル)

変数の複数代入で気を付けるべきこと



for文とタプル

for文の詳細については以下を参照してください。
第6回.for文とイテラブルオブジェクト
プログラムとは処理手順であり、突き詰めれば条件分岐しながら繰り返し処理を行うものです。繰り返し処理はプログラミング言語に無くてはならない処理になります。Pythonでの繰り返し処理のうち、今回はfor文の説明になります。

for文で要素を1つずつ取り出すことができます。

for word in ("pthon","range","list","tuple"):
    print(word)
Python tuple ミュータブル イミュータブル


while文とタプル

while文の詳細については以下を参照してください。
第7回.while文とデバッグ(ステップイン)
プログラムとは処理手順であり、突き詰めれば条件分岐しながら繰り返し処理を行うものです。Pythonでの繰り返し処理のうち、今回はwhile文の説明になります。for文に比べると使用頻度は落ちると思いますが、基本として身に付けておくべきものです。

lst = ("pthon","range","list","tuple")
i = 0
while i < len(lst):
    print(lst[i])
    i += 1
Python tuple ミュータブル イミュータブル

len()は、オブジェクトの長さ (要素の数) を返す組み込み関数です。


tupleのメソッド

タプルはイミュータブル(変更不可)なので、リストとは違いメソッドは限られています。

index()メソッド

引数の値をリストから探しインデックスを返します。
値が存在しない場合はエラーになります。

Python tuple ミュータブル イミュータブル

count()メソッド

リスト内に、引数の値が何個入っているかの件数を返します。

Python tuple ミュータブル イミュータブル


タプルの並べ替え(sorted関数)

イテラブルの要素を並べ替えた新たなオブジェクトを返します。

sorted(iterable, *, key=None, reverse=False)

*
キーワードのみ引数となります。
呼び出し時に仮引数名が必須になります。
key
引数をとる関数を指定します。
リストのそれぞれの要素から比較キーを取り出すのに使います。
例、str.lower、str.upper、len
reverse
真偽値です。
True がセットされた場合、リストの要素は個々の比較が反転したものとして並べ替えられます。

数値リストの並べ替え
Python tuple ミュータブル イミュータブル

文字列リストの並べ替え
アルファベット順ではなく、ASCIIコード順で並べ替えられます。
アルファベット順にする場合は、keyにstr.lowerまたはstr.upperを指定します。

Python tuple ミュータブル イミュータブル




同じテーマ「Python入門」の記事

第7回.while文とデバッグ(ステップイン)
第8回.文字列操作(str型)
第9回.リスト(list型、配列)
第10回.タプル(tuple型、イミュータブル)
第11回.辞書(dict型)
第12回.組み込み関数一覧
第13回.関数の定義(def文)と引数
第14回.関数内関数(関数のネスト)とスコープ
第15回.lambda(ラムダ式、無名関数)と三項演算子
第16回.Pythonの引数は参照渡しだが・・・
第17回.リスト内包表記


新着記事NEW ・・・新着記事一覧を見る

CSV読み書き(csvモジュール)|Python入門(9月29日)
「Excel 4.0 マクロ」の使い方|VBA技術解説(9月28日)
CSV読み込みとopen()関数とwith文|Python入門(9月28日)
フォルダとファイルの一覧を取得(os,glob,pathlib)|Python入門(9月26日)
import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ