2016/06/06更新

[Python] タプルに入門する(生成、タプルからの代入、イミュータブル)

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
最近、『入門 Python 3(O'Reilly)』でPythonの基礎に立ち戻って勉強をしています。今日はその中で、Pythonのタプルについてブログを書きたいと思います。

画像

目次




タプル(Tuple)とは

タプルとはPythonのデータ構造の1つで、(1, 2, 3)という形式で表されます。タプルの特徴としては以下の感じです。
  • 様々なデータ型を持つことができる
  • 一度生成したらデータを書き換えできない(=イミュータブル)
  • 関数で複数戻り値を返す際に使える
  • 辞書(Dictionary)のキーに使える
プログラミングでメインで使うかというとそうでもなく、リストや辞書形式の方がよく使われますが、タプルも時々使う(使う必要がある)ので覚えておいて損はないです。



タプルの生成

タプルは以下のように生成することができます。
# 空のタプルを作る
empty_tuple = ()
print(empty_tuple) # ()

# 値を代入して作る(1つの場合)
one_marx = "Groucho",
print(one_marx) # ('Groucho',)

# または、かっこをつけても良い
one_marx = ("Groucho",) # 一番後ろの「,」が必要
print(one_marx) # ('Groucho',)

# 初期データが複数の場合は、こんな感じ
multi_number = "One", "Two", "Three"
print(multi_number) # ('One', 'Two', 'Three')

# 同じく、かっこ付きでも良い
multi_number = ("One", "Two", "Three")
print(multi_number) # ('One', 'Two', 'Three')

# tupleを使うことで、他のデータ型から変換できる
tuple_from_list = tuple([1,2,3])
print(tuple_from_list) # (1, 2, 3)
こんな感じで、タプルを生成することができます。タプルは(後述の通り)イミュータブルで生成後に値を変えることができないので、初期化時に値を設定する必要があります。



タプルから値を取り出す

タプルから値を取り出す場合には、以下のように行います。
tuple_data = 1,2,3,4,5
print(tuple_data[1]) # 2
for d in tuple_data:
  print(d) # 1 2 3 4 5
この辺はリストなどと同じなので、わかりやすいですね。



タプルから変数に代入する

タプルが便利なのはこの辺です。タプルを使うことで、複数の変数に一度に値を代入することができます。
multi_number = "One", "Two", "Three"

# タプルを使って、一気に3つの変数に代入する
a, b, c = multi_number
print(a) # 'One'
print(b) # 'Two'
print(c) # 'Three'
この特徴を利用することで、関数から複数の値を返すことができます。
# 関数の戻り値をタプルにすることで、複数の値を返却できる
def multi_return_function():
  return 1,2
a, b = multi_return_function()
print(a) # 1
print(b) # 2
また、タプルを使うことで、2つの変数の値を入れ替える場合に(ソートアルゴリズムなどで)、tmpなどの一時変数なしに入れ替えることができます。
ice1 = "Strawberry"
ice2 = "Vanilla"
ice2, ice1 = ice1, ice2
print(ice1) # Vanilla
print(ice2) # Strawberry
と、この代入というところがタプルの一番の魅力ではないかなーと、感じています。



タプルは生成後に値を変更できない(イミュータブル)

タプルは最初に少し触れた通り、一度タプルを生成した後には、値を変更することができません。この性質により、生成後に値が変わらないことを保証することができます(JavaScriptなどではわざわざこのイミュータブルを実現するためのImmutable.jsというライブラリも存在します)。
# 生成後に値を変更すると、エラーとなる
tuple_is_immutable = (1,2)
tuple_is_immutable[0] = 10
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: 'tuple' object does not support item assignment
ということで、タプルはイミュータブルで、値を変更されたくない場合には便利です。



参考資料

今回の記事を書くために、以下の本で勉強しました。基本的なことが網羅的に描かれているので、基礎の学習に非常にいいなぁと感じています。

『入門 Python 3(O'Reilly)』



最後に

本日は、Pythonのタプルというデータ型についてブログを書きました。僕はPythonを始めた頃、タプルというデータ型を理解していなくて、少し苦労した気がします(今までやってきたJavaやJavaScriptやSwiftではなかったor使わなかった)。こーゆうデータ型もあるんだなーと勉強になった覚えがあります。
これからもPythonの基礎をしっかりと押さえるべく、今回のような記事を書いていけたらと思います。

最後になりますが本ブログでは、Web系ツール・Python・Swift・Java・フロントエンド・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。