Takuyaです。
今回は Python のタプル型についてです。リスト型と同じで、タプル型も複数の値をまとめて扱うデータ型です。
では順番に見ていきましょう。
確認環境
本記事に記載していることは次の環境で動作を確認しました。
- Python 3.8.2
- macOS Catalina 10.15.4
タプルを作成する
タプルは ( )
で作成します。( ) は日本語だと丸括弧、英語だと parenthesis (パレンティス)と呼ぶそうです。 ( ) 内にはコンマ区切りで値(要素)を書きます。
num_tuple = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print("type(num_tuple):", type(num_tuple))
print("num_tuple:", num_tuple)
ただし、タプルに入れたい値が1個の場合、num_tuple(0,) と値の後ろにコンマを書く必要があります。
コンマを忘れた場合、エラーになれば良いのですが、エラーにはなりません。
num_tuple = (0)
print("type(num_tuple):", type(num_tuple))
print("num_tuple:", num_tuple)
上記の実行結果
type(num_tuple): <class 'int'>
num_tuple: 0
なんと、int型になってしまいました。
まぁでもタプルに値を1個だけ入れたいケースはほとんど無いと思われるので、頭の片隅にでも置いておきましょう。
ちなみに、Pycharm という IDE で確認していますが、上記のようなコードを書くと、Pycharm から余計な ( ) を削除するように勧められます。

逆に、「タプルは ( ) で作成します」とお伝えしましたが、実は ( ) は必要ありません。
num_tuple = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
print("type(num_tuple):", type(num_tuple))
print("num_tuple:", num_tuple)
上記の実行結果
type(num_tuple): <class 'tuple'>
num_tuple: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
x = 1,
print("type(x):", type(x))
print("x:", x)
上記の実行結果
type(x): <class 'tuple'>
x: (1,)
こっちのほうが厄介ですね。
() 無しでもタプルを作成できますが、() を使いましょう。
リストと同じように、文字列、リスト、ブーリアン型を入れることもできますし、混在もできます。
タプルとリスト
ここからは、どちらも複数の値をまとめて扱うデータ型であるタプルとリストについて、同じ点と違う点を見ていきます。
リストについては下記記事を参照ください。
タプルとリストの同じ点
まずはタプルとリストの同じ点です。
インデックスを指定して値の読み出すことができる
タプルもリストと同様にインデックスを指定して値を読み出すことができます。
str_tuple = ("abc", "def", "ghi", "xyz")
print("str_tuple[1]:", str_tuple[1])
スライス操作で一部を切り出すことができる
タプルもリストと同様にスライス操作で一部を切り出すことができます。
str_tuple = ("abc", "def", "ghi", "xyz")
print("str_tuple[:1]:", str_tuple[:1])
print("str_tuple[::2]:", str_tuple[::2])
その他には、指定した値の個数を数える count メソッドや、指定した場所のインデックスを調べる index メソッドはタプルとリストどちらも持っています。
また、値を別々の変数に展開して代入するアンパッキングもタプル、リストどちもできます。
次のような複数の変数に同時に値を代入する記述はタプルが使われています。
x, y = 1, 99
print("x:", x)
print("y:", y)
タプルとリストの違う点
タプリとリストの違う点ですが、リストではできる次のことがタプルではできません。
タプルでできないこと
- 値を追加できない
- 値を削除できない
- 値を変更できない
- sort メソッドがない(並び変えられない)
- reverse メソッドがない(並び順を逆にできない)
ということで、タプルは作成時の状態から変えることができません。
ただし、スライス操作した結果はタプルとして返ってくるので、スライス操作で新しいタプルを作ることは可能です。
num_tuple = (1, 2, 3)
print("num_tuple[0:1]", num_tuple[0:1])
print("num_tuple[0:2]", num_tuple[0:2])
タプルはどういう時に使う?
では、タプルはどういう時に使われるのでしょうか?
おそらく、タプルを使わないでもリストで何とかなります。
何とかならないケースが思い浮かびません。
中身を変更したくない、されたくないような場合にはリストよりもタプルが適しているケースはありそうですが、リストで何とかなります。
以上です。
コメント