Pythonのtuple(タプル)とはなんぞや?【タプルの使い方】

Python

今回の記事ではPythonのtuple(タプル)について解説します。

この記事では、

  • タプルとは?
  • タプルの基本的な使い方
  • タプルのメソッドの使い方

を学ぶことができます。

タプルとは?

タプルとは任意の数の要素を持つことができる配列です。しかし、後から要素を追加・削除・変更することができません。

タプルには要素を変更するようなメソッドが定義されていないため基本的にリストよりも処理が軽いです。なので要素を変更しない場合はリストよりもタプルを使った方がメモリに優しいです。

また、関数の戻り値にタプルを使うことで複数の値を返すこともできます。

タプルには以下のような特徴があります。

  • 不変(イミュータブル)
  • 複数の型の要素を格納することが多い
  • リストよりも処理が軽い
  • 関数の戻り値として使う
  • シーケンス型である

これらのことを踏まえた上でタプルの使い方を見ていきましょう!

タプルの宣言・初期化

タプルは以下のように宣言・初期化できます。

宣言

タプルを宣言するには()を使います。

変数名 = ()

tuple()を使っても宣言できます。

変数名 = tuple()

初期化

タプルを初期化するには()に要素を,(カンマ)区切りで記述します。

変数名 = (要素1, 要素2, ..., 要素N)

要素が1つの場合は以下のように初期化できます。

変数名 = 要素,

サンプル

タプルを初期化して出力してみます。

t = (1, 2, 3)

print(t)
print(type(t))

実行結果

(1, 2, 3)
<class 'tuple'>

タプルの要素を取得する

タプルの要素にアクセスするには以下のような方法があります。

任意の要素にアクセスする[インデックス]

インデックスから任意の要素にアクセスすることができます。

書き方

以下のように[]内にアクセスしたい要素のインデックスを指定します。

タプル[インデックス]

サンプル

負の数を指定することで末尾の要素から取得することができます。

t = (1, 2, 3)

print(t[0])
print(t[1])
print(t[2])

print()  # 改行

print(t[-1])
print(t[-2])
print(t[-3])

実行結果

1
2
3

3
2
1

任意の範囲の要素を取得する[スライス]

スライスを使うことで任意の範囲の要素のみを取得することができます。
【関連】スライスの使い方

書き方

スライスは以下のように記述します。

タプル[start:stop]
タプル[start:stop:step]

サンプル

試しに任意の範囲の要素のみを取得してみます。

t = [1, 2, 3, 4, 5]

print(t[1:4])
print(t[:3])
print(t[2:])

実行結果

(2, 3, 4)
(1, 2, 3)
(3, 4, 5)

各要素にアクセスする[for文]

for文を使って各要素にアクセスすることができます。

書き方

以下のように記述します。

for 変数名 in タプル:
    繰り返す処理

タプルの要素が順番に変数に代入され要素の分だけ繰り返し処理します。

サンプル

以下のコードはタプルの各要素にアクセスして出力しています。

vals = (1, 2, 3)

for val in vals:
    print(val)

実行結果

1
2
3

要素をバラバラに取得する[アンパック]

タプルはアンパックして取得することができます。

アンパックとは?

配列などのまとまったデータをバラバラにして変数などに代入することです。

t = (1, 2, 3)

# 配列の要素分の変数で受け取る
t1, t2, t3 = t

print(t1, t2, t3)

実行結果

1, 2, 3

関数の引数としてタプルをアンパックして渡すことができます。その際は、タプル名の前に*(アスタリスク)を付けて引数に指定します。

t = (1, 2, 3)

def func(one, two, three):
    print(one)
    print(two)
    print(three)

# この呼び出しは「func(t[0], t[1], t[2])」と等価
func(*t)

実行結果

1
2
3

長さの取得[len関数]

len関数を使ってタプルの長さを取得できます。

使い方

以下のように記述します。

len(タプル)

サンプル

試しにタプルの長さを出力してみます。

vals = (1, 2, 3)

print(len(vals))

実行結果

3

任意の要素のインデックスの取得[indexメソッド]

indexメソッドを使うことで指定した要素のインデックスを取得できます。ただし、最初にマッチした要素インデックスのみを取得します。

使い方

以下のように記述します。

タプル.index(要素)

検索範囲を指定することもできます。

タプル.index(要素, スタート, ストップ)

サンプル

試しに要素を指定してインデックスを取得してみます。

vals = (1, 2, 3, 1, 2, 3)

idx = vals.index(2)
print(idx)

# 検索範囲を指定する(3 <= N < 6)
idx = vals.index(2, 3, 6)
print(idx)

実行結果

1
4

任意の要素の数を取得[countメソッド]

countメソッドを使って指定した要素がタプルにいくつ格納されているかを取得できます。

使い方

以下のように記述します。

タプル.count(要素)

サンプル

試しに指定した要素がタプルにいくつ格納されているかを確認してみます。

name = ('ボ', 'ボ', 'ボ', 'ー', 'ボ', 'ボ', 'ー', 'ボ', 'ボ')

print(name.count('ボ'))

実行結果

7

並び替え[sorted関数]

タプルにはsortメソッドが無いためsorted関数を使用します。

書き方

デフォルトでは昇順で並び替えします。

並び替えたタプル名 = sorted(タプル)

reverse引数をTrueにすることで降順で並び替えできます。

並び替えたタプル名 = sorted(タプル, reverse=True)

サンプル

タプルを昇順・降順で並び替えて出力してみます。

vals = (5, 3, 2, 1, 3, 1)

# 昇順
sort_vals = sorted(vals)

# 降順
sort_reverse_vals = sorted(vals, reverse=True)

print(sort_vals)
print(sort_reverse_vals)

実行結果

[1, 1, 2, 3, 3, 5]
[5, 3, 3, 2, 1, 1]

余談: tupleは変更できない…?

タプルは要素の追加や削除はできません。しかし、タプル同士を連結させることで新たなタプルを生成することはできます。

以下の例を見てください。

t1 = (1, 2, 3)
t2 = (4, 5)

t = t1 + t2

print(t)
# (1, 2, 3, 4, 5)

t1とt2を連結させたtを生成できました。
また、一時的にリストに変換することで他の処理も可能です。

t = (1, 2, 3)

# リストに変換
l_t = list(t)


# 要素の追加
l_t.append(4)

print(l_t)
# [1, 2, 3, 4]


# 要素の削除
l_t.remove(1)

print(l_t)
# [2, 3, 4]


# タプルに変換
t = tuple(l_t)
print(t)
# (2, 3, 4)

このようにリストに変換することで要素を変更できます。

まとめ

今回はタプルの使い方を解説しました。

配列を使う場合、汎用性の高いリストを使うことが多いですが変更が必要ない場合はタプルを使った方がメモリを節約することができます。状況によって使い分けることで柔軟性の高いコードを書くことができます。

今回の内容はここまでです。それではまた〜!

タイトルとURLをコピーしました