Pythonの勉強をしていると、「タプル」という聞き馴染みのない言葉に遭遇します。
「タプル」は、初心者の段階ではあまり用いませんが、応用的なプログラムを書いていく段階で必要になってきます。
この記事では、Pythonに触れ始めて間もない方に向け「タプルとはどういうものか」を解説した後、「Pythonにおけるタプル基本的な使い方」を説明します。
最後まで読んで、タプルをマスターしちゃいましょう!
AIやデータサイエンスを学びたくてPythonを学び始めたけど
「独学ではやっぱり限界がある」
と不安を感じた方にオススメしたいのが、Aidemy Premium Plan。
AIに関する幅広い種類の講座や徹底したコーチング指導が特徴です!
実務を見据えてPythonをがっつり学習していきたい方は、まずは無料の「オンライン相談」に参加してみてください。
また、Aidemy Premium Planのメリットやデメリットなどについては、以下の記事も参考にしてください。
Aidemy(アイデミー)の評判と口コミまとめ!受講したほうがいい理由を紹介
Pythonで使用されるタプル(tuple)とは
初めに、Pythonで使用される「タプル」とは何かについて説明いたします。
まずは押えておきたいデータ型
Pythonでは、我々が見ている文字の種類を、見えない次元で区別しています。
例えば、「1」と表示されている場合でも、それが文字としての「1」なのか、整数としての「1」なのかで処理の方法が変わります。
「1」を文字として捉えた場合、「1」+「1」は、「1」と「1」を横に並べるという解釈になり、「11」が出力されます。
一方、「1」を整数として捉えた場合の「1」+「1」は、小学校1年生のときに習った足し算と同様に、「2」という結果が出力されます。
以下は、Pythonの基本的なデータ型をまとめました。
データ型 | 例 |
整数(int) | -2, -1, 0, 1,2 |
浮動小数点数(float) | -1.5, -0.75, 0.0, 1.7, 3.28 |
文字列 | ‘a’, ‘bb’, ‘あいう’, ‘6日’ |
タプルは複数のデータを扱うことができる型
タプルは、整数・浮動小数・文字列といったデータ型を複数含むことができる箱のようなものです。
例えば、
animals = (‘dog’, ‘cat’, ‘rabbit’, ‘elephant’)
という形をしており、これはanimalsという箱の中に4つの文字列を含んでいることを意味します。
また、それぞれの文字列には、先頭から0、1、2、3という数字(インデックス)が対応しており、animals[1]は’cat’を示します。
タプルの中には、整数や浮動小数などの数を入れることができます。
タプルとリストの違い|タプルは一度定義したら変更できない
タプルと似たようなデータ型にリストというものがあります。
タプルとリストは、両方とも複数のデータを扱うことができる型ですが、
- タプル: 一度定義したら後から値を変更・追加・削除できない(イミュータブル)
- リスト: 定義しても後から値を変更・追加・削除できる
といった違いがあります。
リストについてまだ詳しくない方は、以下の記事をはじめにお読みください。
参考: 【Python初心者】リストの使い方|基本からメソッド・リスト内包表現まで
複数のデータを含む似たようなデータ型は、他にも存在します。
以下の表をご覧ください。
データ型 | 説明 |
リスト | 一度定義しても後から変更することができるデータ型 |
タプル | リストとほぼ同様だが、一度定義したら変更することができないデータ型 |
辞書 | リストにおけるインデックスを任意の値(キー)に設定できるデータ型 |
https://creive.me/archives/32496/ | 数学の集合の概念と似ており、重複した要素がなく、順序を持たないデータ型 |
タプルの使いどころ|リストではなくタプルを使う場合
Pythonのタプルは、リストと違い、以下のような効果があります。
- 値の並びを変更するつもりがない時
- コードをを少しでも速くしたい時
タプルで記述すると、他の人がプログラムを見た際、「この値の順番は変えてはいけないんだな」と察することができます。
実験データなど、値の順番に意味があるデータに関しては、「値の順番を決して変えてはならない」というアピールになります。
また、値を変更しないとPythonに宣言していることで、Python側が最適化を行い、コードが若干速くなるというメリットもあります。
Pythonにおけるタプル(tuple)の基本操作
ここでは、タプルを作成(定義)するところから、取り出し・連結・変更・削除といった基本操作を解説します。
タプルの作成(定義)
リストを定義する方法は2つあります
()で作成
タプル名 = (タプルの要素)とすることでリストを定義できます。
height = (166, 171, 176, 168, 172)
これは、heightという名前のタプルに、166、171、176、168、172という要素を入れることを表します。
tuple関数で作成
リスト名 = tuple(タプルの要素)とすることでリストを定義できます。
name = tuple('ARASHI')
これは、nameという名前のタプルに、’A’、’R’、’A’、’S’、’H’、’I’という要素を入れることを表します。
tuple関数は1〜100までを要素とするような、引数に反復可能オブジェクトを設定するようなリストを定義する場合に有効です。
しかし、慣れるまでは扱いづらいので、初めのうちは()でタプルを作成しましょう。
タプルから1つの値を取り出す(インデックス指定)
タプルから値を取り出す場合は、タプル名の横にインデックスを指定します。
height = (166, 171, 176, 168, 172) # タプルの定義 height[1] # 171を表す
インデックス番号は0から始まるので、
インデックス | 0 | 1 | 2 | 3 | 4 |
値 | 166 | 171 | 176 | 168 | 172 |
のような対応になります。
また、取り出した要素同士で演算をすることができます。
height[0] + height[4] # 166+172の結果を表す
インデックスにマイナスの値を設定することもできます。
-1はタプル末尾の要素、-2はタプル末尾から2番目と対応していきます。
height[-2] # 168を表す
タプルから複数の値を取り出す(スライス指定)
インデックスで要素を指定した場合は要素を1つ取り出すことができましたが、スライスで指定すると複数の値を取り出すことができます。
スライスは[a:b]とすることで指定できます。
これはa以上b未満のインデックスを指定することを意味します。
height = (166, 171, 176, 168, 172) # タプルの定義 height[1:3] # (171,176])を表す height[0:4] # (166, 171, 176, 168)を表す
また[a:]はa以上、[:b]はb未満、[:]はすべてのインデックスを指定することを意味します。
height[2:] # (176, 168, 172)を表す height[:2] # (166, 171)を表す height[:] # (166, 171, 176, 168, 172)を表す
タプルを連結する
+演算子を用いることで、連結したタプルを新たに生成することができます。
a = ('Python', 'HTML', 'CSS') # タプルの定義 b = ('Ruby', 'PHP') # タプルの定義 a + b #('Python', 'HTML', 'CSS', 'Ruby', 'PHP')を表す
タプル内の値を変更する
「タプルは変更不可能(イミュータブル)なのに、変更なんでできるの?」
という疑問を持った方、正解です。
もちろん変更はできません。
しかしタプルを一度リストに変換して、値を変更、そしてもう一度タプルに変換する操作を行えば擬似的にタプルの中身を変更したような結果が得られます。
以下は、animalsといタプルのelephantをmonkeyに変更するプログラムです。
animals = ('dog', 'cat', 'rabbit', 'elephant') # タプルの定義 l = list(animals) # タプルをリストに変換 l[3] = 'monkey' # リストの値を変更 animals = tuple(l) # リストをタプルに変更 animals # ('dog', 'cat', 'rabbit', 'elephant')を表す
タプルの値を削除する
タプルの値を削除する際も、一度リストに変換してからdel文で削除、タプルに戻すという操作で対応できます。
animals = ('dog', 'cat', 'rabbit', 'elephant') # リストの定義 l = list(animals) # タプルをリストに変換 del l[2] #インデックス2の’rabbit’削除 animals = tuple(l) # リストをタプルに変更 animals # ('dog', 'cat', 'elephant')を表す
最後に: Pythonのタプルとリストの違いを理解しよう!
タプルは、リストの要素を変更できなくしたもの(イミュータブル)という特徴を持っています。
初心者の段階では、使い所はあまり分からないかもしれませんが、サンプルコードを見ているとたまに出てくるので、この際に覚えてしまいましょう!