【Python初心者】タプル【リスキリング】

Programming
スポンサーリンク

 

Pythonを勉強するために本を買ったけど,積読してる.
最初の方の数値や算術演算,文字列の扱いで止まっている.
似たデータ型でリストってあるけど,違いは何?
できる操作は違うの?

 そんな方が,タプルを理解して,辞書や集合の学習に進むための記事です.
 

本記事の内容

 

 前回の「リスト」から,複合データ型を解説しています.今回は「タプル」です.まずはタプルの作成とデータ(個々の要素)の取得方法を,その後要素の追加方法,リストとの違いなどを解説します.これまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.

スポンサーリンク

タプルとは|作成方法

 タプルは,複数のデータに順番をつけて,ひとまとめにしたデータです.表1に示すように,ミュータブルが×となっています.すなわち,リストと異なり,タプルでは要素の書き換えができません.ただし,既存のタプルを連結して,新しいタプルを作成することはできます.
 

表1.複合データ型

型(クラス) ミュータブル※1 シーケンス型※2
リスト(lis
タプル(tuple) ×
辞書(dict) ×
集合(set) ×

※1: ミュータブル:同じオブジェクトで中の値を書き換え可能.
※2: シーケンス型:順序を持つ.
 

 タプルを使う場面としては,元号と西暦,日付,カラーコードの組み合わせ,フォネティックコード,塩基とアミノ酸など,組み合わせから構成されているデータで利用します.タプルとリストの違いの詳細については,本記事の最終節で解説します.まずは,タプルの作成方法を学びながら,実行結果がどのように表示されるかをみてみましょう.
 

 

タプルの作成

 0個以上の要素(タプル内のオブジェクト)をカンマで区切り,( )(丸括弧)で囲んで記述します.ただ,リストと異なり,括弧をつけなくてもタプルを定義できます.リストと同様に,比較的長いデータにすることができるので,変数に代入して,短いコードで表現できます.

タプル名 = (要素1, 要素2, 要素3・・・)

 

0個以上の要素をカンマで区切り,丸括弧で囲んで記述する.(括弧をつけなくても良い)

(-3, -2, 1, 0, 1, 2, 3)
(-3, -2, 1, 0, 1, 2, 3)

 

("さとう", "しお", "す", "せうゆ", "みそ")
(‘さとう’, ‘しお’, ‘す’, ‘せうゆ’, ‘みそ’)

 

"砂糖", "塩", "酢", "醤油", "味噌" # 括弧をつけなくても良い.
(‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’)

 

変数に代入できる.

tuple_ex1_1 = (-3, -2, 1, 0, 1, 2, 3)
(-3, -2, 1, 0, 1, 2, 3)

 

tuple_ex1_2 = -3, -2, 1, 0, 1, 2, 3 # 括弧がなくても良いが,括弧をつけるとタプルだとわかりやすい.
(-3, -2, 1, 0, 1, 2, 3)

 

tuple_ex2_1 = ("砂糖", "塩", "酢", "醤油", "味噌")
tuple_ex2_1
(‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’)

 

tuple_ex2_2 = "砂糖", "塩", "酢", "醤油", "味噌"
list_ex2_2
(‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’)

 

各要素を,一度に個別の変数へ代入できる.(左辺の変数が,要素と同じ個数である場合)

tuple_ex3 = ("Alpha", "Bravo", "Charlie", "Delta", "England")
a, b, c, d, e = tuple_ex3
a
‘Alpha’
b
‘Bravo’
c
‘Charlie’
d
‘Delta’
e
‘England’
a, b, c, d, e # a~eをカンマで区切りにして,タプルとして出力
(‘Alpha’, ‘Bravo’, ‘Charlie’, ‘Delta’, ‘England’)

 

異なる型が混在しても良い.

tuple_ex4 = ("西暦", 2023, "令和", 5)
tuple_ex4
(‘西暦’, 2023, ‘令和’, 5)

 

同じ要素を含んでも良い.

tuple_ex5 = (0, 0, 255) #  Blueのカラーコード
tuple_ex5
(0, 0, 255)

 

タプルを入れ子できる.

tuple_ex6 = (("砂糖", "酒", "みりん"), "塩", "酢", "醤油", "味噌")
tuple_ex6
((‘砂糖’, ‘酒’, ‘みりん’), ‘塩’, ‘酢’, ‘醤油’, ‘味噌’)

 

要素が1個のタプルは末尾にカンマをつける.

"砂糖", 
(‘砂糖’,)

 

("砂糖",) 
(‘砂糖’,)

 

tuple_ex7_1 = "砂糖", 
tuple_ex7_1
(‘砂糖’,)

 

tuple_ex7_2 = ("砂糖",)
tuple_ex7_2
(‘砂糖’,)

 

tuple_ex7_x = ("砂糖")  #  カンマをつけなければ,タプルではなくなる.
tuple_ex7_x
‘砂糖’

 

何も記述しない場合,空タプルとなる.

tuple_empty = ()
()

 

 まとめ

  • 0個以上の要素をカンマで区切り,丸括弧で囲んで記述する.(括弧をつけなくても良い)
  • 変数に代入できる.
  • 各要素を,一度に個別の変数へ代入できる.(左辺の変数が,要素と同じ個数である場合)
  • 異なる型が混在しても良い.
  • タプルを入れ子できる.
  • 要素が1個のタプルは末尾にカンマをつける.
  • 何も記述しない場合,空タプルとなる.

 

 

型の確認

 type()関数を使って確認します.「tuple」と表示されるか確認してみましょう.
 ただし,いくつかのイレギュラーも確認してください.例えば,tuple_ex2_1 と tuple_ex2_2 は,それぞれ括弧の有無が異なるタプルでしたが,代入した変数をtype()関数の引数に渡せます.

type(tuple_ex2_1) # tuple_ex2_1 = ("砂糖", "塩", "酢", "醤油", "味噌")
tuple

 

type(tuple_ex2_2) # tuple_ex2_2 = "砂糖", "塩", "酢", "醤油", "味噌"
tuple

 

一方,括弧がないタプルをそのままtype()関数の引数に渡せません.

type("砂糖", "塩", "酢", "醤油", "味噌") #  括弧がないタプルを引数にできない.
—————————————————————————
TypeError Traceback (most recent call last)
in ()
—-> 1 type(“砂糖”, “塩”, “酢”, “醤油”, “味噌”)

TypeError: type() takes 1 or 3 arguments

 

 要素が1つのタプルではカンマをつけるだけで記述できました.しかし,このままの状態で関数の引数として渡すことはできません.

type("砂糖", )
str

 

変数に代入するか,丸括弧をつけていれば,関数の引数に渡せます.

# tuple_ex7_1 = "砂糖",
type(tuple_ex7_1)
tuple

 

#tuple_ex7_2 = ("砂糖",)
type(tuple_ex7_2)
tuple

 

 

タプルへのデータ型の変換

 tuple()関数を使って,データ型をタプルに変換できます.
 

文字列をタプルに変換

リストと同様に,文字列シーケンスを一文字ずつ分割して,タプルに変換できます.

tuple("タプルにするで!")
(‘タ’, ‘プ’, ‘ル’, ‘に’, ‘す’, ‘る’, ‘で’, ‘!’)

 

リストをタプルに変換

list_ex = ["タ", "プ", "ル", "に", "す", "る", "で", "!"]
tuple(list_ex)
(‘タ’, ‘プ’, ‘ル’, ‘に’, ‘す’, ‘る’, ‘で’, ‘!’)

 

 

要素の取得

 文字列やリストと同様に,インデックスを使用して要素の一部を取得できます.

【Python初心者】文字列とエスケープシーケンス【リスキリング】
Pythonの文字列の扱いについて解説します。ぜひ記事を読みながら、コードを書き、打ちこんだコード通りに、結果が出力されるのを体感してください。Pythonを学びたい方、学び直したい方は、ぜひご一読ください。

 

 リストの記事で示した例を,タプルに書き換えて例を示します.

tuple_num = (0, 1, 2, 3, 4, 5, 6, 7, 8)

 

[開始値:停止値:間隔]→指定した開始値から停止値の1つ手前まで,指定した間隔ごとの要素

tuple_num[0:6:2] 
(0, 2, 4)

 

リストでの配列をタプルに書き換えて試してみてください.

【Python初心者】リスト【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?リストの操作について,基本から分かりやすく解説しています.Pythonを学びたい方、学び直したい方、より深く学びたい方は,ぜひご一読ください.

 

 

スポンサーリンク

タプルの操作


 タプルはイミュータブルなので,リストのように書き換え,すなわち置換,削除,並べ替えができません.そのようなメソッドも定義されていません.ただし,前述のように,+演算子を用いて既存のタプルを連結したり,*演算子を用いて既存のタプルを繰り返し追加したりすることはできます.
 

表2.タプルの操作一覧

操作 関数・メソッド 演算子ほか インデックス
連結 +, +=
追加 *
検索取得 .index(), .count(), len() in

 

 後述のように,リストとタプルには,構成されるデータに若干の違いがあります違いがあります.ただ,操作を理解しやすくするために,リストの記事と同じ要素で練習してみましょう.
 

 

タプルの連結

+演算子

prime1 = (2, 3, 5, 7, 11)
prime2 = (13, 17, 19, 23)
prime1 + prime2 # prime1 + prime2を出力.次のコードのように,変数に代入することも可能.
(2, 3, 5, 7, 11, 13, 17, 19, 23)

 

prime1 = (2, 3, 5, 7, 11)
prime2 = (13, 17, 19, 23)
Prime1 += prime2 # 代入演算子を用いて,prime1=prime1+prime2とすることもできる.
Prime1 # prime1を出力
(2, 3, 5, 7, 11, 13, 17, 19, 23)

 

タプルの追加

*演算子

fibo1 =  (0, "golden ratio", 1, 1, 2, 3, 5, 8)
fibo1 *= 2 # 代入演算子を用いて,fibo1 = fibo1*2とすることもできる.
fibo1
(0, ‘golden ratio’, 1, 1, 2, 3, 5, 8, 0, ‘golden ratio’, 1, 1, 2, 3, 5, 8)

 

 

要素の検索

取得は前述のとおりです.
わかりやすくするために,リストと同じ要素のタプルで示します.

.index()メソッド → 要素のオフセットを調べる

fibo1 = (0, 1, 1, 2, 3, 5, 8)
fibo1.index(8)
6

 

fibo1.index(1) # 同じ要素があると最初の値のオフセットが出力される.
1

 

.count()メソッド → 要素の個数を調べる

fibo1.count(8)
1

 

fibo1.count(1) # 1は2つある.
2

 

len()関数 → リスト内の要素数を調べる

len(fibo1)
7

 

in → 要素の有無を調べる

8 in fibo1
True

 

4 in fibo1
False

 

 

スポンサーリンク

タプルとリストの違い


 リストは変更可能で,タプルは変更できませんでしたね.そのほかにどのような違いがあるのか,引用を紹介します.

  • リストは変更可能で,タプルは変更不可
  • リストは大抵同じ型の要素,タプルは複数の型の要素からなることが多い.
  • タプルは,複数のデータの組み合わせから構成されているデータ.

 

 
タプルはリストと似ていますが、たいてい異なる場面と異なる目的で利用されます。タプルは不変で、複数の型の要素からなることもあり、要素はアンパック(この節の後半に出てきます)操作やインデックス (あるいは namedtuples の場合は属性)でアクセスすることが多いです。一方、リストは可変で、要素はたいてい同じ型のオブジェクトであり、たいていイテレートによってアクセスします。

 

 

 
複数のデータの組み合わせから構成されているデータを表現する場合、タプル という種類のオブジェクトを利用します。
タプル(tuple)というのはあんまり聞き慣れない言葉ですが、組 などとも呼ばれ、複数の要素が決まった順番にならんだ値を指します。

 

 

タプルについて,基本を学べましたでしょうか?
次は「辞書」について学びましょう!

【Python初心者】辞書【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?辞書の操作について,基本から分かりやすく解説しています.Pythonを学びたい方、学び直したい方、より深く学びたい方は,ぜひご一読ください.

最後まで読んでくださり,ありがとうございます☺️
 

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