【基礎文法】Pythonのデータ構造(タプル)の使い方

スポンサーリンク
Pythonの基本文法_入門編_データ構造(タプル) Python

Pythonのデータ構造(タプル)の使い方

Pythonのデータ構造の一つにタプルがあります、似たようなものにリストがあります、両者は機能的に似ているのでよく対比されるのですが、全くの別物でそれぞれ特徴があります。

本記事では、Pythonのタプルについて解説していきます。リストの場合と比較しながら読み進めると理解が進むでしょう。

重要度:★★★★★

スポンサーリンク

1. タプルをつくる


リストがミュータブルなデータ構造であるのに対し、タプルはイミュータブルとなります。

つまり、リストは作成後、要素を追加・削除・変更が可能ですが、タプルではそのようなことはできません。

Pythonには定数がありませんが、タプルは定数の代わり(完全に定数ではありません)使われることが多くあります。

本節では、タプルの作り方からリストとの相違点の例を示しながら解説を進めます。

Python 公式ドキュメント

https://docs.python.org/ja/3/library/stdtypes.html#tuple

1.1. タプルのつくりかた

タプルの構造

➀タプルはカッコ”(“,  “)”の中に要素をカンマ ”, ”区切りされたデータ構造

  タプル: (要素1、要素2、・・・・)

以下にて、タプルのつくり方の例を紹介します。


例1.タプルをつくる方法はいくつか用意されています。代表的な3例を紹介します。

まずは、もっとも基本的な方法で丸カッコ”(“,  “)”の中に要素を入れていくパターンです。要素は、整数、文字列または型混載などができます。(➀~➂)

# <タプル> 基本的な作り方1

print( ('a', 'b') )             #➀ ('a', 'b') 文字列を要素とする
print( (123, 456) )             #➁ (123, 456) 数値を要素とする
print( ('a', 123) )             #➂ ('a', 123) 文字列と数値を混合させることができる
#-------------------------------------------

2つ目は、要素をカンマ” , “ 区切りで記述する方法でもつくることができます。

要素が1つのみの場合はでも後ろにカンマを付ける必要があります。➅

# <タプル> 基本的な作り方2

t1 = 'a', 'b'
t2 = 123, 456
t3 = 'a',           #要素が1個のみの場合

print(t1)           #➃ ('a', 'b')
print(t2)           #➄ ('a', 'b')
print(t3)           #➅ ('a',)
#-------------------------------------------

そして最後3つ目は、標準関数 tuple() を使う方法です。

引数は1つだけ指定することができ、標準関数 range() や文字列またはリストを指定することで効率的にタプルをつくることができます。(➆~➈)

# <タプル> 基本的な作り方3

print(tuple(range(-2, 2)))      #➆ (-2, -1, 0, 1)
print(tuple('abc'))             #➇ ('a', 'b', 'c')

lst = ['abc', 'def', 1]
print(tuple(lst))               #➈ ('abc', 'def', 1)
#-------------------------------------------

ちなみに、引数を2つ以上指定すると次のようにエラーが発生します。➉

print(tuple(1, 2, 3))           #➉ エラー
#TypeError: tuple expected at most 1 arguments, got 3

例2.タプルの要素には、リテラルだけではなく、リストやタプルといったオブジェクトも要素に持つことができます

# <タプル> タプル構造のネスト
print( ( (10, 20), (30, 40) ) )         #➀ ((10, 20), (30, 40)) タプルの要素にタプル
print( ( [10, 20], [30, 40] ) )         #➁ ([10, 20], [30, 40]) リストをタプルの要素にする
print( ( 10, 20, [30, 40], 'abc' ) )    #➂ (10, 20, [30, 40], 'abc') 混載できる
#-------------------------------------------

2. タプルをつかう

本節ではタプルの使い方を解説します。

基本的な使い方は、リストと同様ですので、リストと対比しながら読み進めると理解が進むでしょう。イミュータブルなデータ構造であるタプルを上手に使うことが重要です

また、タプル特有の使い方として”アンパック、組込み関数”zip()”があり使用例を紹介しています。

Python 公式ドキュメント

https://docs.python.org/ja/3/library/stdtypes.html#tuple

2.1 タプルをつかう

タプルを使う

➀タプルの要素の参照方法

  (要素1、要素2、要素3)[ index ] (使い方はリストと同じ)

➁タプル要素の取得(アンパック)

➂タプル要素の包含関係を調べる

  in演算子(リストと同様)

➃タプルの比較(値、オブジェクト

  値: ==演算子など ,  is演算子など その他詳細は「演算子の記事を参照」

  

以下にて、タプルの使い方の例を紹介します。


例1. タプルの中のオブジェクトを参照するには、次のように角カッコ ” [ ” ” ] “ を使います。インデックスの指定方法はリスト同様です。先頭から0,1,2といったように指定できます。➀➁

また、負数を指定することで末尾から指定できるのもリストと同様です。➂

#<リスト>の参照方法

print( (10, 20, 30, 40, 50)[0] )            #➀ 10
print( (10, 20, 30, 40, 50)[4] )            #➁ 50
print( (10, 20, 30, 40, 50)[-1] )           #➂ 50
#-------------------------------------------

タプルの要素がタプルやリストの場合も同様に角カッコ ” [ ” ” ] “とインデックスで参照することができます。➂~➅

#要素がタプル
print( ( (10, 20), (30, 40) )[0])           #➂ (10, 20)
print( ( (10, 20), (30, 40) )[0][0])        #➃ 10

#要素がリスト
print( ( [10, 20], [30, 40] )[0] )          #➄ [10, 20]
print( ( [10, 20], [30, 40] )[0][0] )       #➅ 10
#-------------------------------------------

例2. 次の例はインデクスを使わずにタプルオブジェクトから要素を取り出す方法を紹介します。

変数(タプルの要素数分) = タプルオブジェクトで各変数に要素を取り出すことができます。➀~➂のように指定できます。また、➂では値の交換を行うことができます。

#タプルのアンパック
(a, b) = ('a1', 'b1')
print(a); print(b)              #➀ a1   b1

a, b = ('a2', 'b2')
print(a); print(b)              #➁ a2   b2

a, b = 'a3', 'b3'
print(a); print(b)              #➂ a3   b3
#-------------------------------------------

2.2 タプルに関連する組込み関数

組込み関数

➀タプルの最大、最小、合計など

  sum(), max(), min() 引数にはタプルオブジェクトを指定する

➁複数のリストを列結合したタプルをつくる

  zip([リスト1 a1, a2, a3,・・・], [リスト2 b1, b2, b3],・・・)

zip()の戻り値: (a1, b1…) , (a2, b2…) , (a3, b3…) ・・・

例1.タプルもリスト同様に数値計算用の標準関数を利用することができます。

num = (15, 21, 59, 9, 42, 68)

print(sum(num))             #➀ 214  要素の合計値
print(max(num))             #➁  68  要素の最大値
print(min(num))             #➂  9   要素の最小値
#-------------------------------------------

例2.リストを効率的にアンパックするためにzip()という標準関数が用意されています。複数のリストオブジェクトを引数に指定すると各リストの要素順にアンパックされたタプルを戻り値に返します。

list1 = [11, 12, 13]
list2 = [21, 22, 23]
list3 = [31, 32, 33]

print(type(zip(list1, list2, list3)))   #➀ <class 'zip'> zipオブジェクト

print(list(zip(list1, list2, list3)))   #➁ [(11, 21, 31), (12, 22, 32), (13, 23, 33)]
#-------------------------------------------

3. まとめ

最後に、この記事のまとめになります。

  • タプルはリストと同様に操作することができる
  • タプルはイミュータブルなオブジェクトで後から変更できない
  • タプル特有の使い方としてアンパックやzip()などがある

最後までお読み頂きありがとうございました。

次の記事では、もう一つのデータ構造(辞書)について解説します。

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