Python:タプルについて(リストとの違い)

Python

Pythonには沢山のデータを扱うのに便利なリストがあります。

リスト

words = ["tomato", "lemon", "melon"]

これとほぼ似たような記述をもつタプル(tuple)というものも存在します。

タプル

words = ("tomato", "lemon", "melon")

記述に関して言えば、[ ] を用いてデータ列をくくるか、( ) を用いてくくるかの違いです。
利用に関しては、リスト・タプルともに word[1] などのように添え字を使って個別にアクセスできます。

リストとタプルの大きな違い

リストとタプルの一番大きな違いは、タプルで記述するとデータの書き換えが出来ない点です。
一度設定した値をプログラム中で書き換えて欲しくないデータの時はタプルを利用します。

他のプログラミング言語でいうとconst宣言などに近いです。

例えばリストを使って一部のデータを書き換えるには以下のようになりますが...

list_kakikae.py

# リストの一部データを書き換え

words = ["tomato", "lemon", "melon"]
print(words)

words[1] = "apple"  # 書き換え
print(words)

実行結果

['tomato', 'lemon', 'melon']
['tomato', 'apple', 'melon']

上記プログラムをタプルに置き換えて実行すると...

tuple_kakikae.py

# タプルのデータを書き換えてみる(6行目で実行エラー)

words = ("tomato", "lemon", "melon")
print(words)

words[1] = "apple"
print(words)

次のように6行目でエラーが発生します。

エラーメッセージの内容

words[1] = “apple”
TypeError: ‘tuple’ object does not support item assignment

最初に設定したデータを後で書き換える必要がある場合は、タプルではなくリストを使いましょう。

タプルを利用するメリット

一度宣言したデータは書き換え出来ないタプルですが、メリットがあります。

タプルで宣言したデータは処理速度がリストより速いという事です。

検索などで何万件というデータを利用するのであれば、タプルを利用するメリットはあります。

ただし、リストで利用できたようなinsert(挿入), reverse(反転)などの便利な演算メソッドは利用できませんlen(words)などのようにlen関数は利用可能です。

words = (“tomato”, “lemon”, “melon”)
words.reverse()

詳しくはPython公式ドキュメントをご覧ください。

組み込み型 — Python 3.8.20 ドキュメント

リストとタプルの相互変換は可能

リストに設定したものを検索したくなったが、件数が多いので実行速度を上げたいとか、一時的にリストをタプルにしたい、あるいはタプルを一時的にリストにしたい。そのようなときは相互に変換が可能です。

リストからタプルへの変換

tuple() を利用します。
引数にはリスト型のオブジェクトを指定します。

list_to_touple.py

# リストをタプルに変換する

words = ["tomato", "lemon", "melon"]

words_tuple = tuple(words)  # wordsをタプル型に変換

print(words)
print(words_tuple)

実行結果

['tomato', 'lemon', 'melon']
('tomato', 'lemon', 'melon')

タプルをリストに変換

list() を利用します。
引数にはタプル型のオブジェクトを指定します。

touple_to_list.py

# タプルをリストに変換する

words = ("tomato", "lemon", "melon")

words_list = list(words)  # wordsをリスト型に変換

print(words)
print(words_list)

実行結果

('tomato', 'lemon', 'melon')
['tomato', 'lemon', 'melon']

わたしはずっとタプルtoupleだと思っていました。
tupleが正解ですね!

以上、Python:タプルについて(リストとの違い)でした。

コメント

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