タプルとは、複数のデータを1つのまとまりの中に入れて、管理できるものです。このように複数のデータを1つにまとめるデータ構造はコンテナと呼ばれており、タプル以外にもリスト、辞書、集合と呼ばれるものがあります。それぞれの特徴は以下の通りです。
タプル
複数のデータ(要素)を格納できる。リストと同様、各要素にはインデックスと呼ばれる番号が関連づけられており、そのインデックスで要素を指定することができる。リストとの違いは、タプル内の要素は変更不可能という点がある。このように変更不可能なことをイミュータブル(immutable、日本語訳:変更不可能な)という。
リスト
複数のデータ(要素)を格納できる。各要素にはインデックスと呼ばれる番号が関連づけられており、そのインデックスで要素を指定することができる。リスト内の要素は変更可能。このように変更可能なことをミュータブル(mutable、日本語訳:変更可能な)という。
辞書
複数のデータ(要素)を格納できる。キーと呼ばれるものと値と呼ばれるものが2つで1組として、格納される。リストやタプルのようにインデックスで関連づけられていない。その代わりにキーで値を指定することができる。
集合
数学の「集合」を表すことができる。各要素は重複しない。変更可能なミュータブルな型、変更不可能なイミュータブルな型、どちらもとることができる。
タプルとリストの違い
タプルとリストは似ていますが、タプルは一度作成したら、内容を変更できないイミュータブル、リストは一度作成しても、内容の変更ができるミュータブルなのが大きな違いです。ですので、一度作成して、内容に変更を加えたくないもの(誤って変えてしまう可能性も0にしたいもの)はタプルで、途中で要素を加えたり、削除したりなど変更したいものはリストで作成するのがよいと思います。
タプルの作り方
タプルの作り方には大きく分けて2つあります。
① ()(丸カッコ)で囲む
② tuple()関数を用いる
それぞれについて見ていきます。
()(丸カッコ)で囲んでタプルを作る場合
作り方は簡単です。()(丸カッコ)で囲むだけです。例として、変数animalsに色々な動物を格納し、データ型も確認します。
animals = ("monkey","crab","crocodile")
print(animals)
print(type(animals))
【実行結果】
('monkey', 'crab', 'crocodile')
<class 'tuple'>tuple()関数を用いてタプルを作る場合
変数名 = tuple(引数)とコードを書きます。
文字列を引数とする場合
tuple()関数の引数を文字列にする場合、引数は1つしか書けません。また、文字が1文字ずつに分解されて、1文字が1つの要素として、タプルの要素になります。
animals = tuple("monkey")
print(animals)
【実行結果】
('m', 'o', 'n', 'k', 'e', 'y')tuple()関数に引数を無理やり2つ入れて、タプルの要素を2つにしようとすると…
animals = tuple("monkey","crab")
print(animals)
【エラーメッセージ】
TypeError: tuple expected at most 1 arguments, got 2「タプルの引数は多くて1つだよ。2つあるよ。」と怒られてしまいます。
リストを引数とする場合
tuple()関数の引数にリストを用いると、複数の引数を一度にタプルにすることができます。
animals = tuple(["monkey","crab","crocodile"])
print(animals)
【実行結果】
('monkey', 'crab', 'crocodile')
range()関数を引数にする場合
ここまでは文字列が要素になっていましたが、tuple()関数の引数にrange()関数を用いると数字を要素にしたタプルが楽に作れます。
myNum = tuple(range(0,10,2))
print(myNum)
【実行結果】
(0, 2, 4, 6, 8)▼関連記事:【Python】range関数の使い方
タプルの要素を取り出す
続いて、タプルの中にある要素を指定して、取り出したいと思います。指定する時はインデックスと呼ばれる数字を用いて要素を指定します。インデックスは前から順に0から始まるという点に注意が必要です。

では、実際にmonkey(要素0)を指定して取り出してみましょう。指定する時はタプルが格納されている変数に[](角カッコ)をつけて、[]の中に要素のインデックス(番号)を入れればOKです(例:animals[0])
animals = ("monkey","crab","crocodile")
print(animals[0])
【実行結果】
monkey要素2を取り出してみましょう。
animals = ("monkey","crab","crocodile")
print(animals[2])
【実行結果】
crocodile-(マイナス)を使って要素を取り出す
要素の指定ですが、-(マイナス)を使って取り出すこともできます。この場合、-1がタプル内の一番後ろの要素、-2がタプル内の後ろから2番目、-3が…と続きます。 実際に例をみてみましょう。
animals = ("monkey","crab","crocodile")
print(animals[-1])
print(animals[-2])
print(animals[-3])
【実行結果】
crocodile
crab
monkey-1で要素を取り出すとタプル内の一番後ろの要素crocodileが、-2で要素を取り出すとタプル内の後ろから2番目の要素crabが、-3で要素を取り出すとタプル内の後ろから3番目の要素monkeyが取り出されました。
存在しないインデックス値を指定した場合
存在しないインデックス値で要素を指定しようとした場合、エラーが返されます。
animals = ("monkey","crab","crocodile")
print(animals[8])
【エラーメッセージ】
IndexError: tuple index out of range「タプルのインデックス値が範囲外ですよ。」と怒られてしまいました。
上記コードではインデックス値は0、1、2が存在した状態で、インデックス値8は存在しないので、当然といえば当然です。
ここまでの内容はリストとほぼ同じで、要素を囲むカッコが()(丸カッコ:タプル)か[](角カッコ:リスト)くらいしか違いがありません。
冒頭で述べたようにイミュータブル(タプル)とミュータブル(リスト)の違いがでてくるのが、次の記事ですので、お時間ありましたら、ご覧頂けると幸いです。


コメント