Python PR

リストとタプルの違い、使い分け

記事内に商品プロモーションを含む場合があります

私はProgateでPythonの門戸を叩いたのですが、タプル(tuple)というのは教材の中には一切出てこず、後々その存在を知ることとなりました。

タプルは基本的にはリストと同じですが、リストのように要素を上書き変更できないこと、リストに比べて計算速度がはやい、メモリを食わないことが主な違いになります。

リストとタプル

NHK「おかあさんといっしょ」のキャラクターを使って、リストとタプルを書いてみたいと思います。

リスト

リストはこうです。

members = ['チョロミー', 'ムームー', 'ガラピコ']
members

[‘チョロミー’, ‘ムームー’, ‘ガラピコ’]
リストのうち、先頭の要素はこのように抜き出せます。

members[0]

‘チョロミー’

リストはこのように要素を変更することが可能です。

members[0] = 'ブンバボン'
members

[‘ブンバボン’, ‘ムームー’, ‘ガラピコ’]

タプル

つづいて、タプルです。

members = 'チョロミー', 'ムームー', 'ガラピコ'
members

(‘チョロミー’, ‘ムームー’, ‘ガラピコ’)

次のようにカッコをつけてもオッケーです。

members = ('チョロミー', 'ムームー', 'ガラピコ')
members

(‘チョロミー’, ‘ムームー’, ‘ガラピコ’)

タプルのうち、先頭の要素はこのように抜き出せます。

members[0]

‘チョロミー’

リストと違って、タプルは要素を変更できません。

members[0] = 'ブンバボン'

TypeError: ‘tuple’ object does not support item assignment

タプルはこんな書き方もできる

タプルだとこんな書き方もできます。

a,b,c = 'チョロミー', 'ムームー', 'ガラピコ'
a

‘チョロミー’

個人的に、タプルといえばscikit-learnに入っているtrain-test_split関数が思い浮かびます。機械学習でデータをtrainデータとtestデータに分ける関数で、Xのtrainデータ、Xのtestデータ、yのtrainデータ、yのtestデータのタプルを返すものです。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y)

 

基本的に、〇〇, △△, ◇◇というようにカンマで区切られたものはタプルになります。そう考えるとタプルはいろんなところで無意識に使っているオブジェクトと言えそうです。

タプルのメリット

リストとタプルは非常に似ています。Pythonの経験がそれほど多くない人にとっては、使うのはリストばかりで、タプルを意識的に使う場面はほとんどないと思います。

タプルのメリットは、リストに比べて計算速度がはやいメモリを食わないという点です。計算速度をはやくしたい場合、リストの中身の変更を伴わないのであればタプルに替えると効果があるようです。

まとめ

リストとタプルの違いを簡単に比較しました。タプルが重宝されるのは計算速度を上げる場合です。簡単なコードを書いたり簡単なデータ分析をするレベルであれば、気にせずリストを使えばよいと思います。