本記事では、pythonで用いられるデータ型であるリストとタプルの違いについて解説していこうと思います。
この二つのデータ型は非常に似ているのですが、性質上少し用途に違いが出てくるのでその違いやそれぞれどんな場面で使用するのかを具体的にお話ししていきます。
ちなみに、本ブログでは初心者の方でも理解できるように丁寧に説明しているので、全くの初心者という方も安心してください。
また、pythonをまだインストールしていないといった方は以下の記事を参考にしてインストールしてみましょう。
この記事でわかること
- リストとタプルの異なる点
- リストの応用例
- タプルの応用例
目次
リストとタプルの相違点
まず初めに、リストとタプルの違いについて説明していこうと思います。
ちなみに、本記事ではリストとタプルの違いに焦点を当てているため、それぞれの説明に関してはあまりしていません。
なので、リスト・タプルについてもっと知りたいという方は、より詳しく説明している以下の記事を参考にしてみて下さい。
リストとタプルの明確な違い
結論から述べてしまいますが、リストとタプルの違いは、変数作成後に要素をいじれるかどうかです。
リストの場合は、宣言を行った後でも以下のコードのように自由に要素を変更したり、要素の追加・削除を行ったりすることが出来ていたと思います。
<input>
list = [1, 2, 3, 4, 5]
list[0] = 100
print(list)
list.append(200)
print(list)
del list[1]
print(list)
<output>
[100, 2, 3, 4, 5]
[100, 2, 3, 4, 5, 200]
[100, 3, 4, 5, 200]
一方、タプルの場合は要素の変更や追加・削除を一切行うことが出来ません。
これがリストとタプルの決定的な違いであり、使い分ける際もこの特徴に応じて使い分けることになります。
ちなみに、リストのように要素を好き勝手いじれるようなものを『ミュータブル』、タプルのように要素の変更不可能なものを『イミュータブル』と言います。
興味がある方はこちらも合わせて覚えておきましょう。
リストを使用する際のメリット
続いてリストを使用する際のメリットですが、やはり要素の変更が出来るという点に尽きると思います。
後でまたリストを用いた応用例を挙げるのですが、タプルでは要素の追加が出来ないため、データの融通が利きません。
「要素を1ずつ増やしていく処理を書きたい」「ある条件を満たすと要素を追加するような処理を書きたい」といった場合にはリストの方が優れているどころか、タプルでは実現が難しいのです。
タプルを使用する際のメリット
では、いったいタプルを利用する際のメリットは何でしょうか。
こちらは二つあります。
一つ目は、要素の変更が出来ないというところです。
「いやいやそれはデメリットでしょ?」と思うかもしれませんが、実は世の中には要素を好き勝手返られると困るようなデータがいくつも存在しています。
このようなデータに対してタプルを使うのが有効的というわけですね。
また、二つ目の理由としては、処理速度の速さにあります。
色々と融通が利くリストですが、タプルよりも処理速度が遅いため大きなプログラムを組んだ時にリストばかりを使ってしまうと処理が少し重くなってしまいます。
ただ、微々たるものなのであまり大きなプログラムを組まないうちは特に気にすることはないと思います。
「へ―そうなんだ」と思ってもらえれば大丈夫です。
リスト・タプルの応用例
最後に、リストやタプルの応用例について紹介していこうと思います。
実際にどのように使われるのかを知ってそれぞれの理解を深めていきましょう。
リストの応用例
<input>
seat = []
min = 0
max = 3
seat.append("p")
print(min <= len(seat) < max)
seat.append("p")
print(min <= len(seat) < max)
seat.append("p")
print(min <= len(seat) < max)
seat.pop(0)
print(min <= len(seat) < max)
<output>
True
True
False
True
こちらは、タクシードライバーが客を乗せていき、客がいっぱいになったら『False』を出力するといったプログラムです。
『seat[]』が座席になっていて、乗客が乗るとseat[]というリストにpassenger(乗客)を意味する『”p”』が追加されます。
乗客がタクシーに乗るごとに席がいっぱいになっていないかを判定し、いっぱいになっていたら『False』を返すといった感じですね。
実際にアプリケーションを作る際は、Falseになったらリストに要素を追加できないとかやるべきですね((笑)
また、pop(0)は乗客がおりている様子を表現しています。
一人降りたらTrueとなりまた席が空きましたね。
このようなプログラムは要素を変更できないタプルには組むことが出来ないのでリストの性質を使ったプログラムと言えるでしょう。
タプルの応用例
<input>
questions = ("A", "B", "C")
answer = []
answer.append("A")
# ユーザーに選択肢を表示
print(questions)
# ユーザーが答えた後回答を表示
print(answer)
<output>
('A', 'B', 'C')
['A']
こちらはクイズ形式のアプリケーションを想定したプログラムで、『questions』が問題の選択肢を格納しておくタプル、『answer』が答えを格納しておくリストです。
今回は、問題が選択されたときに『print(questions)』によって回答の選択肢を表示して、ユーザーが答えを選んだ際に『print(answer)』で答えを表示するといった感じを想定しています。
ここで輝くのがタプルです。
今回のアプリケーションでは、答えは問題ごとに異なるためリストを使用しなければいけませんが、例えば問題の選択肢がどの問題も共通だった場合は変更してしまうと処理がおかしなことになってしまうのでタプルを利用したほうが良いですよね。
まとめ
今回は、リストとタプルの違いについて説明してきましたがいかがだったでしょうか。
リストとタプルはデータの形のみを見ると非常に似ているのですが、『要素変更の可否』といった大きな部分が異なります。
なので、使用する場面や使用方法は全く異なるというわけです。
そんなリストとタプルですが、アプリケーションを作成するためには、両方自由に使いこなしてあげる必要があります。
それぞれの特徴をよく理解して、使用するようにしましょう。