0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

復習 Python tutorial #3 データ構造2

Last updated at Posted at 2021-03-04

タプル

タプルは#2で説明した通りイミュータブル(変更不可)なものである。作り方はごく簡単で、()を使って作成すれば良い。また変更したいと思った時はリストに変更すれば良い話である。そのことについてもこの後説明していく。

タプルの作り方

your_characteristics = ('name', 'born', 'living', 'state')
# もしくは
your_characteristics = 'name', 'born', 'living', 'state'

このどちらかでタプルの作成はできる。

他の機能

タプルの良いところの一つに一度に複数の変数を代入できるということもある。

name, born, living, state = your_characteristics
print(name)

辞書

辞書はリストと似ている部分があるが、要素を取り出すときに異なる点がある。まず個々の値に一意のキーを与える。キーは文字列の場合が多い。また辞書はイミュータブルなのでキー/値の変更や追加編集などが主に可能になる。

作成

{}を用いて作成していく。そのときにkey:valueのペアをカンマで区切って並べ{}で囲んで作る。

my_characteristics = {'name': 'Kouta','FROM':'TOKYO', "LIVING":'NEW YORK', "FAVORITE FOOD": "SUSHI"}
print("I'm from", my_characteristics["FROM"])
# 実行結果
I'm from TOKYO

このように簡易的な個人情報とかには最適のように感じる。また要素の取り出しも簡易的で定義も見やすいのでよく使われるものである。

dict()を用いて変換

dict()を用いることによってリストから変換することができる。例えば

food_translating = [['PIZZA', 'ピザ'], ['PASTA', 'パスタ'], ['Soup', 'スープ']]
dict_food_translating = dict(food_translating)
print(dict_food_translating)

update()による結合

updateを使うと辞書同士を結合できる。

other_my_characteristics = {'GENDER': "MAN"}
my_characteristics.update(other_my_characteristics)
print(my_characteristics)
# 実行結果
{'name': 'Kouta', 'FROM': 'TOKYO', 'LIVING': 'NEW YORK', 'FAVORITE FOOD': 'SUSHI', 'GENDER': 'MAN'}

del()によるしていしたキーを持つ要素の削除

del my_characteristics['GENDER']
print(my_characteristics)
# 実行結果
{'name': 'Kouta', 'FROM': 'TOKYO', 'LIVING': 'NEW YORK', 'FAVORITE FOOD': 'SUSHI'}

inを使ったキーの有無のテスト

print('name' in my_characteristics)
# 実行結果
True

keys()による全てのキーの要素の取得

print(my_characteristics.keys())
# 実行結果
dict_keys(['name', 'FROM', 'LIVING', 'FAVORITE FOOD'])

value()による全ての値の取得

list_my_characteristics = list(my_characteristics.values())
print(list_my_characteristics)
# 実行結果
['Kouta', 'TOKYO', 'NEW YORK', 'SUSHI']

clear()による全ての要素の削除

my_characteristics.clear()

集合

集合は値を放り出してキーだけを残した辞書みたいなものである。辞書と同様に個々のキーは一位でなければならない。集合は何かがあるかどうかの確認の時に使われる。だから、辞書のように何か値があり、その情報などを打ち込む必要はない。だから集合の表し方は値のない辞書のようなものであり、{}で表せる。

even_numbers = {2, 4, 6, 8}
odd_numbers = {1,3,5,7}
# set()による作成
My_name = set('Kouta')
# 実行結果
{'o', 'a', 'u', 't', 'K'}

このようにランダムな値が返される。また同じ文字が入っていても、そのうちの一つしか値が取り出せないことにも注意が必要である。

inを用いた値の有無のテスト

print('K' in My_name)
# 実行結果
True

その応用

これからやっていくifやforを用いて行うもので要素があるかどうかチェックするものである。辞書を使う時、key: valueであるがこの時両方の要素を取り出す時にはitemsを用いることによってkey: valueの両方に関して代入ができる。またif文に関しては追って説明していくが、このようにして、今日はパスタが食べたいとかになったら行きたい店を検索できるようになる。

food_shop = {'A MART': {'Curry', 'Pasta', '親子丼', 'Ramen', 'Sushi'},
'B MART': {'Pizza', 'Pasta', 'Ramen'},
'C MART': {'Potato', 'Ice', 'Curry', 'Sushi'}}
for name, menu in food_shop.items():
    if 'Pasta' in menu:
        print(name)
# 実行結果
A MART
B MART
    if menu & {'Pasta', 'Pizza'}:
        print(name)
# 実行結果
A MART
B MART

&は{}中にあるどちらかが入っていたら値を返す積集合演算子である。

データ構造

もっと大きいデータ構造を考えるとなると、制限がつく。その制限はデータ自体にあり、例えば、辞書のキーに関してはイミュータブルである。よってリスト、辞書、集合は他の辞書のキーにはならない。しかしタプルはキーになる。(タプルはイミュータブルだから)このようなものとして実用的な物の一つにGPS座標がある。要は座標という物はイミュータブルでないといけないが辞書と一緒に用いる時に値の部分に置いてしまうと簡単に変更できてしまう。これを防ぐために辞書のキーに指定することによってイミュータブル化する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?