Pythonのタプル型の使い所は?特徴と宣言・操作方法について

Pocket

こんにちは、爽です。皆さん、いかがお過ごしでしょうか?

今回はPythonのタプル型の特徴と操作方法について確認します。
また、タプル型はリスト型と比較するとあまり使用頻度の高くないデータ型ですが、どのような場面で使うのか、その使い所についても解説します。

■この記事の対象読者
・Pythonに興味がある方
・Pythonを学び始めてみたい方
・Pythonのタプル型の詳細について知りたい方

それではどうぞ!

Pythonのタプル型の特徴と宣言方法

まず、リスト型は複数の要素を入れることができる変数ですが、タプル型も同様で複数の要素を入れることができる変数です。
ただし、タプル型がリスト型と大きく異なる点は、タプル型は一度宣言すると中の要素を変更できないという点です。

タプル型の宣言の基本

まずは具体的な宣言方法についてです。
Pythonでのタプル型の宣言方法は2種類あり、1つ目は代入したい要素を()(丸かっこ)で囲う方法、2つ目は代入したい要素をただ単に,(カンマ)で区切る方法で宣言できます。

#タプル型宣言(丸かっこあり)
t = (1,2,3,4,1,2,3)
t
>>(1, 2, 3, 4, 1, 2, 3)

#データ型の確認
type(t)
>>tuple

#タプル型宣言(丸かっこなし)
new_t = (5,6,7,6,5)
new_t
>>(5, 6, 7, 6, 5)

#データ型の確認
type(new_t)
>>tuple

タプル型の要素を変更しようとするとエラー

タプル型の要素を変更しようとするとエラーが発生します。

#タプル型の要素を変更しようとするとエラー発生
t[0] = 10
t
>>----> 1 t[0] = 10

TypeError: 'tuple' object does not support item assignment

タプル型から要素を取り出す方法

次はタプル型から要素を取り出す方法です。
これはリスト型から要素を取り出す方法と同じで、タプル名[インデックス]の書式で取り出せます。
また、スライスを使うことで任意の幅でタプルの中から要素を取り出すこともできます。

タプル型から要素を取り出す時の基本(インデックスの指定とスライス)

#タプル型宣言
t = (1,2,3,4,1,2,3)

#要素を最初のインデックスから取り出す
t[0]
>>1
#-1で最後のインデックスの要素を取り出す
t[-1]
>>3

#スライスでインデックスの1番目の要素から4番目の要素までを取り出す
t[1:4]
>>(2, 3, 4)
#インデックスの1番目から最後までをスライスで取り出す
t[1:]
>>(2, 3, 4, 1, 2, 3)
#インデックスの最初から2番目までをスライスで取り出す
t[:2]
>>(1, 2)
#最初から最後までをスライスで取り出す
t[:]
>>(1, 2, 3, 4, 1, 2, 3)

存在しないインデックスを指定するとエラー

なお、リスト型と同様に存在しないインデックスを指定するとIndexErrorが発生します。

#存在しないインデックスを指定
t[100]
>>----> 1 t[100]

IndexError: tuple index out of range

タプル型に要素を追加する方法

タプル型は要素を変更することはできませんが、末尾に要素を追加することは可能です。
書式はタプル型 + (要素,)です。
また、+演算子を用いることでタプル同士をくっつけることも可能です。

#タプルに要素を追加する
t = (0,)
t = t + (1,2,3,4,5,)
t
>>(0, 1, 2, 3, 4, 5)

#+演算子でタプル同士をくっつける
t
new_t = (6,7,8,9,10)
new_t = t + new_t
new_t
>>(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

リスト型をタプル型に変換する方法

次はリスト型をタプル型に変換する方法で、これはtupleメソッドを使うことで実現できます。
ちなみにタプル型をリスト型に戻すときはlistメソッドをOKです。

#リスト型宣言
l = ["dog","cat","bird"]
type(l)

#tupleメソッドでリスト型をタプル型に変換する
t = tuple(l)
type(t)
>>tuple

#listメソッドでタプル型をリスト型に戻す
new_l = list(t)
type(new_l)
>>list


タプル型のメソッド

次はタプル型を操作するときに使うメソッドを紹介します。
タプル型のメソッドはリスト型のそれに比べて多くはありません。
各メソッドの詳細な情報は以下のPython公式ドキュメントに記載があります。
>>組み込み型(Python公式ドキュメント)

#タプル型宣言
t = (1,2,3,4,1,2,3)

#countメソッドでリストの中に指定した要素がいくつ含まれているかを確認する
t.count(1)
>>2

#indexメソッドで指定した要素がタプルの中で何番目に最初に登場するかを確認する
t.index(4)
>>3

タプル型のアンパッキング

次はタプル型のアンパッキングです。
アンパッキングとは変数にタプル型の中身を1つずつ展開する処理のことです。

#タプルの中身を変数に展開する
t = (100,200)
x, y = t
print(x,y)
>>100 200

また、アンパッキングを応用して、変数の中身を入れ替えることも可能です。

#アンパッキングを利用して変数の中身を入れ替える(応用)
a = 300
b = 400
a, b = b, a
print(a,b)
>>400 300

タプル型の使い所

さて、ここまででタプル型について色々見てきましたが、じゃあ一体どんなときにタプルって使うの?って気になりますよね。
タプルの使い所としては以下のような2つのシチュエーションで使う場合が想定されます。

  • 変更不可の辞書型のキーとして用いる
  • 上書きされたくない値をリストの代わりに定義する(例えばカレンダー月)
#①変更不可の辞書型のキーとして用いる
#ニューヨークの緯度と経度を定義(北緯40度、西経73度)
ny_pos = (40,73)
#getメソッドの引数に任意のキーを入れて"NewYork"というバリューを取り出す
cities = {ny_pos:"NewYork"}
cities.get(ny_pos)
>>'NewYork'

#②上書きされたくない値をリストの代わりに定義する
month = ("January","February","March")
month
>>3

参考資料

この記事ではUdemyのPython+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~という講座と現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルという2つの講座を参考にさせていただきました。

Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~

Udemyより抜粋

当講座は最低限のWeb開発の知識を知っていることが前提とはなりますが、とにかくPythonの説明とFlask開発の為の説明が充実しているのでおすすめです。
28時間に及ぶ長丁場の講座にはなりますが、絶対に聞く価値がある講座です。
これをマスターすればPythonでどんなアプリケーションでも作ることができると思います。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

とにかく説明が充実している

Webアプリ開発におけるフレームワークがなぜ有益なのか知ることができる

セキュリティ対策、Ajaxなどの技術も知れる

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

画像に alt 属性が指定されていません。ファイル名: a1ee3d048d6aa860662b6f58c4aa167f-1024x328.png

当講座はPythonの基礎から応用まで幅広く学べる講座なのでおすすめです。
この講座の講師はとにかくPythonについての知識が豊富ですし、話も適度な速さで聞き取りやすいです。さすがのシリコンバレーです。
また、最後の方に機械学習で使うライブラリについても解説があるので、データサイエンス・AIについても多少知ることができます。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

シリコンバレーで働いているということもあり、講師のPythonの知識が豊富

話も適度な速さで聞き取りやすい

コードの意味だけでなく、それをどう応用するかまで解説してくれる

なお、Udemyについては以下の記事でまとめていますのでご参考ください。

まとめ

ということで、今回はPythonのタプル型の特徴と操作方法、及びどのような場面で使うかを解説しました。
タプル型はリスト型と比較すると、使い道が少ないように見えますが、書き換えられたくない値をリストのように定義したいときに威力を発揮します。
また、リスト型と比較してアクセスが早いことも特徴なので、より早いアプリケーションを作成するときに向いているので、頭の片隅にでも置いておいて頂きたいデータ型です。
では、今回はここまでとさせていただきます。