Pythonを真面目にゆっくり学ぶべく
を参考に学んでいきます*1。
前回
3. Pyの具:リスト、タプル、辞書、集合
3.3 タプル
タプルは、リストと同様に、任意の要素を集めたシークエンスである。ただしイミュータブルである点がリストと相違する。
3.3.1 ()を用いたタプルの作成
#################### ### タプルの定義 ### #################### empty_tuple = () print(empty_tuple) # 要素が1個のタプル:末尾にカンマ one_marx = 'Groucho', print(one_marx) # 要素が複数のタプル:末尾にカンマ marx_tuple = 'Groucho', 'Chico', 'Harpo', print(marx_tuple) marx_tuple = 'Groucho', 'Chico', 'Harpo' # 最後の要素のカンマは省略可 print(marx_tuple) # タプルは()で囲むことも可能:この方が一目見てタプルと分かりやすい marx_tuple = ('Groucho', 'Chico', 'Harpo') print(marx_tuple)
3.3.2 タプルのアンパック
タプルを用いると複数の変数に一発で値を定義できる。これをタプルのアンパックという。
########################## ### タプルのアンパック ### ########################## marx_tuple = ('Groucho', 'Chico', 'Harpo') a, b, c = marx_tuple print(a) print(b) print(c) pw1 = 'swordfish' pw2 = 'tuna' pw1, pw2 = pw2, pw1 print(pw1) print(pw2)
3.3.3 タプルとリストの比較
タプルはイミュータブルなために利便性が少ないように見える。ではタプルを使うメリットとは何か。
- タプルは消費メモリが少ない
- タプル要素を誤って書き換える危険性が無い
- タプルは後述する辞書のキーに使える
- 名前付きタプルはオブジェクトの代用品にできる
- 関数の引数はタプルとして渡される
3.4 辞書
辞書はリストに似ているものだが、個々の値に一意なキーを与え、キーで値を管理する。キーは文字列が良く使われるが、のイミュータブル型であれば任意の値を用いることができる。辞書はミュータブルであるから、キー/値要素を追加、削除および変更することができる。
3.4.1 {}による作成
辞書の作成は:というペアをカンマで区切って並べ、{}で囲む。
####################### ### 辞書型の作り方1 ### ####################### empty_dict = {} print(empty_dict) # bierce = {"day": "A period of twenty-four hours, mostly misspent", "positive": "Mistaken at the top of one's voice", "misfortune": "The kind of fortune that never misses" } print(bierce) print(bierce['day'])
3.4.2 dict()
####################### ### 辞書型の作り方2 ### ####################### lol = [['a','b'],['c','d'],['e','f']] lol = dict(lol) print(lol['a'])
値の追加は以下のようにする:
################ ### 新規追加 ### ################ pythons = {'chapman': 'Graham', 'Cleese': 'John', 'Idle': 'Eric', 'Jones': 'Terry', 'Palin': 'Michael' } print(pythons) # 新規追加 pythons['Giliam'] = 'Gerry' print(pythons) # 辞書キーは一意でなければならない pythons['Giliam'] = 'John' print(pythons) # 既存のキーの値を置き換えるのみになる
3.4.3 update()による辞書の結合
### update()でコピー pythons = {'chapman': 'Graham', 'Cleese': 'John', 'Idle': 'Eric', 'Jones': 'Terry', 'Palin': 'Michael' } print(pythons) pythons2 = {} pythons.update(pythons2) print(pythons2)
3.4.4 要素の削除
###################### ### 特定キーを削除 ### ###################### pythons = {'chapman': 'Graham', 'Cleese': 'John', 'Idle': 'Eric', 'Jones': 'Terry', 'Palin': 'Michael' } print(pythons) del pythons['Palin'] print(pythons) ########################## ### すべてのキーを削除 ### ########################## pythons.clear() print(pythons)
3.4.5 キーの有無管理
###################### ### 特定キーを検索 ### ###################### pythons = {'chapman': 'Graham', 'Cleese': 'John', 'Idle': 'Eric', 'Jones': 'Terry', 'Palin': 'Michael' } print('Palin' in pythons) # 辞書のキーに特定の値があるか否か print(pythons.get('Palin')) # 辞書のキーに特定の値があれば対応値を返し、 print(pythons.get('Paul', 'Not exists in the dictionary.')) # 無ければ指定したオプション値を変える print(pythons.keys()) # すべてのキーを取得
3.4.6 値の取得
#################### ### 代入とcopy() ### #################### signals = {'green':'go', 'yellow': 'faster', 'red':'smile for camera'} save_signals = signals signals['blue'] = 'confuse everyone' print(save_signals) # = で結ぶと=の左辺が変わると右辺も変わる # copy()すればこれは避けられる signals = {'green':'go', 'yellow': 'faster', 'red':'smile for camera'} save_signals = signals.copy() signals['blue'] = 'confuse everyone' print(save_signals)
*1:第2版が出ているものの初版しか持っていないのでこちらで。