Python3入門(3)タプル 辞書 集合

Python3入門(3)タプル 辞書 集合

タプル型

タプルは一度値を入れると変更できない配列です。使いどころとしては共同作業で開発を行う場合に、リストの値を誤って変更してしまう可能性がある場合などにリストの代わりに使用すると有効です。
タプルの作成方法はリストと似ていますが、()で囲むところが違っています。

タプル型作成例

# タプル作成
t = (1,2,3,4)
# (1, 2, 3, 4)
print(t)
# 値を変更できないのでエラーになる
t[0] = 100
# 1
print(t[0])
# 4
print(t[-1])
#1つだけ要素を入れたい場合はカンマをつける
s = (1,)
# (1,)
print(s)

アンパッキング

Python では、右辺がタプル場合、左辺に複数の変数を置くことで、その中身を展開できます。 これをシーケンスアンパック (sequence unpack) と言います。
この仕様をうまく利用することで、複数の変数を初期化するときにまとめて記述することも可能です。
また、下記の例のようにアンパッキングを使うと変数の入れ替えも簡単にできます。

アンパッキングの例

# タプル作成
num_tuple = (10,20,30)

# (10, 20, 30)
print(num_tuple)

# 変数宣言
a,b,c = (100,200,300)
# 100 200 300
print(a,b,c)

# 変数宣言(実はタプルのアンパッキング)
d,e,f = 'A','B','C'
# A B C
print(d,e,f)

# 変数の入れ替え
i = 10
j = 20
tmp = i
i = j
j = tmp
# 20 10
print(i,j)

# アンパッキングを使った変数の入れ替え
a = 100
b = 200
# 100 200
print(a,b)
a,b = b,a
# 200 100
print(a,b)

辞書型

辞書型(Dictionary型)は連想配列のことです。インデックスの代わりにキーと値をペアでデータ管理を行う仕組みです。

基本的な記述例

# 辞書作成
d = {'x':10,'y':20}
# {'x': 10, 'y': 20}
print(d)
# 10
print(d['x'])
# 'AAA'を代入
d['x'] = 'AAA'
# {'x': 'AAA', 'y': 20}
print(d)

辞書型も参照渡しです。参照渡しの問題を避けるにはcopy()を使います。

# 辞書作成
x = {'a':1}
# 変数yにxを代入
y = x
# 変数のaキーに1000代入
y['a'] = 1000
# {'a': 1000}
print(x)
# {'a': 1000}
print(y)

# 辞書作成
x = {'a':1}
# 変数yにxをcopy()を使って代入
y = x.copy()
# 変数のaキーに1000代入
y['a'] = 1000
# {'a': 1}
print(x)
# {'a': 1000}
print(y)

集合型

書き方はリストに似ていますが、重複した値は表示されない特徴があります。
減算するとaからbに共通する値が消されます。

# 集合の作成
a = {1,2,3,4,5,5,4,3}
# {1, 2, 3, 4, 5}
print(a)
# 集合の作成
b = {2,3,6,7}
# {1, 4, 5}
print(a-b)
# {6, 7}
print(b-a)
# {2, 3}
print(a & b)
# {1, 2, 3, 4, 5, 6, 7}
print(a | b)
#エラーになる
print(a+b)

使い所として、共通点を見つけるときに便利です。

集合型の例

# 集合型作成
my_friend = {'織田','豊臣','徳川'}
oda_friend = {'竹田','上杉','豊臣','徳川'}
#{'豊臣', '徳川'}
print(my_friend & oda_friend)

買い物リストの例

#買い物リスト
fluits = ['apple','banana','grape','apple','pine','apple']
kind = set(fluits)
# {'banana', 'apple', 'grape', 'pine'}
print(kind)

買い物リストを重複を考えずにリスト化したとします。
その後、set()を使って集合型に変更すると重複したリストを省くことができます。