Pythonのタプルは不変(イミュータブル)だが、値を追加する方法はあるのか?
タプルは変更できないオブジェクト
Pythonのタプル(tuple)は不変(イミュータブル)なオブジェクトです。そのため、append() や insert() のように要素を追加・挿入しようとする操作は許されず、実行するとエラーが発生します。
しかし、実際の開発では「既存のタプルに要素を追加したい」という場面に遭遇することがあります。このような場合には、次のような回避策が有効です。
解決策:リストを経由して新しいタプルを作る
手順は以下のとおりです。
- 組み込み関数
list()を使って、タプルをリストに変換します。 - リストであれば自由に
append()やinsert()で要素を追加できます。 - 最後に組み込み関数
tuple()を使い、リストを再びタプルへ戻します。
コード例
>>> T1=(10,50,20,9,40,25,60,30,1,56) >>> L1=list(T1) >>> L1 [10, 50, 20, 9, 40, 25, 60, 30, 1, 56] >>> L1.append(100) >>> L1.insert(4,45) >>> T1=tuple(L1) >>> T1 (10, 50, 20, 9, 45, 40, 25, 60, 30, 1, 56, 100)
処理の流れのポイント
L1.append(100)により、リストの末尾に100が追加されます。L1.insert(4,45)により、インデックス4の位置に45が挿入されます。- 最終的なタプルでは、元の順序を保ちながら
45と100が追加された新しいタプルが生成されています。
注意点:元のタプルは書き換えられない
この方法で作られるのは新しいタプルであり、元のタプルそのものが変更されるわけではありません。厳密には「タプルを更新している」のではなく、「リスト経由で編集した結果から新しいタプルを再構築している」という点を理解しておきましょう。
また、頻繁に要素の追加・削除を行うデータを扱う場合は、最初からリストを使用する方がパフォーマンス面でも可読性の面でも有利です。タプルは、変更されない固定データ(設定値や定数など)を表現するのに適しています。
-
Pythonでタプルのリストを反復処理する方法
タプルのリストを反復処理する最も簡単な方法は、2つのネストされたforループ(二重ループ)を使用することです。外側のループがリストから各タプルを1つずつ取り出し、内側のループがそのタプルに含まれる各要素を順番に走査します。内側のprint()関数では引数にend= を指定することで、改行せずにタプル内のすべての要素を1行に出力できます。さらに、外側のループ内にあるもう1つのprint()が、各タプルの出力後に改行を挿入します。サンプルコードL=[(1,2,3), (4,5,6), (7,8,9,10)] for x in L: for y in x: print(y,
-
Pythonでタプルの中にタプルを入れる方法(ネストされたタプルの使い方)
Pythonにおけるタプルは、丸括弧 () で囲まれた、順序を持つオブジェクトのコレクションとして定義されます。タプルの要素には任意のPythonオブジェクトを格納できるため、タプル自体を別のタプルの要素として含めることも可能です。これを「ネストされたタプル」と呼びます。タプルの中にタプルを定義する以下の例では、タプル t1 の中に、別のタプル (4, 5, 6) を要素として含めています。>>> t1 = (1, (4, 5, 6), 2, 3) >>> t1 (1, (4, 5, 6), 2, 3)インデックスで内側のタプルを取り出すこの例では、t1 の