Pythonではリストが良く使われますが、リストに似た型としてタプル、セット、辞書があります。
一見するとどれも似たようなものですが、それぞれに特徴があり、使い方が異なります。
Pythonでプログラミングをしていくには、これらをうまく使い分ける必要があります。
今回はタプル、セット、辞書の使い方について説明します。

タプル

タプルの特徴

タプルはリストにそっくりなシーケンス型です。リストが四角カッコ記号[]でくくるのに対して、タプルは丸カッコ()でくくります。

tuple = (1, 2, 3, 4, 5)
print(tuple)

実行結果

(1, 2, 3, 4, 5)

タプルは見た目がリストによく似ていますし、インデックスで要素を指定したり、リストでも使われているメソッドがそのまま使えたりします。

tuple = (1, 2, 3, 4, 5)
 print('tupleの4番目の要素:{}'.format(tuple[3]))
print('tupleの長さ:{}'.format(len(tuple)))

実行結果

tupleの4番目の要素:4
tupleの長さ:5

しかし、リストと違いタプルでは一度作ると中身を変更することができません。
つまり作成したタプルに要素を追加したり、逆にタプルから要素を削除したりといったことが一切できません。

tuple[2] = 6 #タプルの3番目に6を入れようとすると…
print(tuple)

実行結果

TypeError: ‘tuple’ object does not support item assignment

この例ではタプルの要素を別の数字で入れ替えようとしましたが、エラーが出てしまいました。
このように、タプルでは要素を追加したり、削除したりするとエラーが出るので中身は一切変えられません。

タプルの利点

一見すると中身を変えられないのはとても不便で、それならリストで良いと思うかもしれません。
しかし、タプルにはリストにはない利点もあります。
まず、タプルはリストより処理速度が少しだけ速いです。
例えば中身を変えなくても良いリストを何度も参照するような場合はタプルのほうがリストより効率が良くなります。
また、リストの場合は長さが変わる可能性がありますが、タプルは一度ある長さで作るとずっとその長さで固定されます。
知らないうちに長さが変わる、といったことがないのでバグが起きにくいです。

セット

セットの特徴

セットは集合型ともいわれる型で、リストやタプルによく似ています。
セットは要素を波カッコ{}でくくります。

set = {1, 2, 3, 4, 5}
print(set)

 
実行結果

{1, 2, 3, 4, 5}

こちらも一見するとリストに似ていますが、セットはリストやタプルにはない特徴を持っています。
まず、セットはユニークな要素だけを保持します。
つまり、同じ要素は1つだけしか持つことができず、2つ目以降は無視されます。

set = {1, 2, 5, 3, 5, 4, 5} #5が3つ入っているが….
print(set)

実行結果

{1, 2, 3, 4, 5}

セットを定義する際に「5」が3つ入っていましたが、中身を表示すると5は1つしか表示されていません。
セットは同じ要素は1つしか保持しないので、あとの2つの5は無視されています。
また、セットは要素の順序を保たないという特徴も持っています。
順序を保たないため、インデックス指定をして要素を取り出す、といったこともできません。

set = {1, 2,'b', 5, 3, 4}
print(set)

 
実行結果1

{1, 2, 3, ‘b’, 5, 4}

実行結果2

{1, 2, 3, 4, 5, ‘b’}

中身が全く同じセットですが、実行するとこのように毎回中身の順序が異なります。

辞書

辞書の特徴

辞書もリストやタプルのように複数のデータを保持するものですが、リストなどと違うのは各要素を「キー」と「値」のペアで保持します。

student_dict = {'001':'itou', '002':'suzuki', '003':'tanaka'}
print(student_dict)

 
実行結果

{‘001’: ‘itou’, ‘002’: ‘suzuki’, ‘003’: ‘tanaka’}

辞書では「:」でキーと値を分けます。
:の左側が要素のキー、右側が要素の値です。
また、全体は集合と同じく波カッコ{}でくくります。
値には文字列や数値、リストなどPythonのオブジェクトであればどんなものでも使えます。
一方のキーはイミュータブル、つまり中身が変更できないタプルや文字列、数値などが使えます。
リストなど中身が変更できるものはキーにはできません。

student_dict = {[0,0,1]:'itou', '002':'suzuki', '003':'tanaka'} #キーにリストを使うと…
print(student_dict)

 
実行結果

TypeError: unhashable type: ‘list’ #エラーになる
 

辞書型の使い方

辞書型もリストやタプルと同じくインデックスで要素を指定したり取り出したりできます。
ただし、リストなどが数字で要素の格納位置を指定するのに対して、辞書型ではキーを使って要素を指定します。
 

student_dict = {'001':'itou', '002':'suzuki', '003':'tanaka'}
print(student_dict['002'])

実行結果

Suzuki

辞書型もセット型と同じく中身の順序が保持されません。
そのため、リストやタプルのように格納位置で要素を指定することはできません。
辞書の更新や削除なども、同じようにキーを指定することで実行できます。

student_dict = {'001':'itou', '002':'suzuki', '003':'tanaka'}
 del student_dict['002']         #削除
student_dict['003'] = 'kimura'  #更新
student_dict['004'] = 'satou'   #追加
print(student_dict)

実行結果

{‘001’: ‘itou’, ‘003’: ‘kimura’, ‘004’: ‘satou’}