Python学習メモ4
タプル
タプルはリストと異なりイミュータブルである。 タプルを定義するのは括弧ではなく、カンマ。ただ括弧があれば分かりやすい。 要素が一つでも最後にカンマを入れる必要がある、入れなければただの変数格納になる。
>>> tapuru1 = 'AA', タプル >>> tapuru1 ('AA',) >>> tapuru2 = ('BB',) タプル >>> tapuru2 ('BB',) >>> tapuru3 = 'CC' タプルではない >>> tapuru3 'CC' >>> tapuru4 = ('DD') タプルではない >>> tapuru4 'DD' >>>
以下はタプルのアンパックと呼ばれる、タプルを使えば複数の変数を一度に代入できる
>>> tapuru5 = ('EE','FF','GG',) >>> tapuru5 ('EE', 'FF', 'GG') >>> a,b,c = tapuru5 a,b,cにそれぞれ0,1,2の変数を格納する >>> a 'EE' >>> b 'FF' >>> c 'GG' >>>
入れ換えも簡単にできる
>>> aaa = '123' ここは変数代入 >>> bbb = '456' ここも変数代入 >>> aaa,bbb = bbb,aaa aaaとbbbを交換している >>> aaa '456' >>> bbb '123' >>>
tuple(リスト名)を使えばリストからタプルへ変換もできる
辞書
他言語では連想配列やハッシュと呼ばれるもの
In [10]: testdic = { {で始まり "day1" : "a day", :で区切り、最後がカンマ "day2" : "perfect day", } }で締める
dict()関数を使えば、2要素のシーケンスを辞書に変換できる
>>> list1 = ['a1','b2','c3','d4'] >>> dict(list1) {'a': '1', 'c': '3', 'd': '4', 'b': '2'} 変換された、辞書内の順番は決まっていないのでばらばらになる >>>
辞書のキーを表示させる
>>> dict1 = dict(list1) >>> dict1 {'a': '1', 'c': '3', 'd': '4', 'b': '2'} >>> >>> dict1['a'] '1' >>> dict1['a'] = 10 キーaの値を変更 >>> dict1['a'] 10 >>> dict1 {'a': 10, 'c': '3', 'd': '4', 'b': '2'} aが10に変わっている >>>
update()で辞書の"結合"ができる
>>> list2 = ['e5','f6'] list2に新しい値を入れておく >>> dict2 = dict(list2) dict2にlist2を辞書変換したものを入れる >>> dict2 辞書変換されている {'f': '6', 'e': '5'} >>> dict1 dict1の中身を表示 {'a': 10, 'c': '3', 'd': '4', 'b': '2'} >>> dict1.update(dict2) dict1にdict2を追加 >>> dict1 dict2のe5とf6が追加されている、dict2の中身は消えずにそのまま。仮にdict1とdict2のキーが被っていた場合は後からきたもの(dict2)の値で上書きされる {'a': 10, 'd': '4', 'e': '5', 'f': '6', 'c': '3', 'b': '2'} >>>
del文でキーを指定するとキーと要素を削除出来る
>>> dict2 {'f': '6', 'e': '5'} >>> del dict2['f'] ''がないとエラーが出る >>> dict2 f6の要素が消えている {'e': '5'} >>>
[key]を指定すると辞書にキーが追加出来る
>>> dict2 {'e': '5'} >>> dict2['f'] = 6 >>> dict2 f6が増えた {'f': 6, 'e': '5'} >>>
clear()で辞書の中身を全て消去できる
>>> dict2 {'f': 6, 'e': '5'} >>> dict2.clear() >>> dict2 消えた {} >>>
inで要素の有無を確認できる
>>> dict1 {'a': 10, 'd': '4', 'e': '5', 'f': '6', 'c': '3', 'b': '2'} >>> 'a' in dict1 キーを指定する True >>> '10' in dict1 値は指定しない False >>>
辞書から要素を取り出すときに辞書専用のget()関数を使うと色々できる
>>> dict1.get('a') 普通に要素を取り出す 10 >>> dict1.get('10','Not Found') 指定したキーが無い場合は'Not Found'を返す 'Not Found' >>> dict1.get('10') オプション(Not Foundのとこ)が無ければNoneになる >>>
kyes()で全てのキーを返す、values()で全ての値を返す
>>> dict1 {'a': 10, 'd': '4', 'e': '5', 'f': '6', 'c': '3', 'b': '2'} >>> dict1.keys() dict_keys(['a', 'd', 'e', 'f', 'c', 'b']) >>> dict1.values() dict_values([10, '4', '5', '6', '3', '2']) >>>
keys()やvalues()で返ってきたものをリスト化する
>>> list(dict1.keys()) list関数の中で呼び出す ['a', 'd', 'e', 'f', 'c', 'b'] >>> list(dict1.keys())[0] list[0]を取り出した状態 'a' >>>
items()でkeyとvalueのセットが全て返ってくる
>>> dict1.items() 全て返ってきた dict_items([('a', 10), ('d', '4'), ('e', '5'), ('f', '6'), ('c', '3'), ('b', '2')]) >>> list(dict1.items()) 全て返してlist化した、タプルで返ってくる [('a', 10), ('d', '4'), ('e', '5'), ('f', '6'), ('c', '3'), ('b', '2')] >>> list(dict1.items())[0] list化して最初のセットを取り出した状態、タプルで返ってくる ('a', 10) >>>
辞書の場合も元の辞書が=で書き換えられてしまったら、コピーしたものも書き換わる。 必要に応じてcopy()で元の辞書を書き換えても影響が内容にする。
集合
集合は値を取り出してキーだけを残した辞書のようなもの。
set()で作るか{}で値のみを入れて作る
>>> syuugou1 = set() 空の場合、実際には空の辞書が作られる >>> syuugou1 set() >>> syuugou1 = { 値のある集合 ... 1,2,3,4,5 ... } >>> syuugou1 {1, 2, 3, 4, 5} >>>
文字列から集合を作る場合
>>> set('letters') {'s', 'e', 'r', 'l', 't'} 重複している文字は省かれる >>> >>> set({'1':'a','2':'b','3':'c',}) 辞書を渡す {'1', '3', '2'} キーのみ使われる >>>
&またはintersection()を使うと積集合(両方にある共通の要素)が出力される
>>> a = {1,2} >>> b = {2,3} >>> a & b {2} >>> a.intersection(b) {2} >>>
|またはunion()を使うと和集合(どちらか片方にある要素)が出力される
>>> a | b {1, 2, 3} >>> a.union(b) {1, 2, 3} >>>
-またはdifference()を使うと差集合(先のものにあって後ろのものにないもの)が出力される
>>> a - b aには1はあるが、bには1がない {1} >>> b -a bには3はあるが、aには3がない {3} >>> a.difference(b) {1} >>> b.difference(a) {3} >>>
^またはsymmetric_difference()を使うと排他的OR(どちらか片方には含まれているが、両方には含まれていない要素)が出力される
>>> a ^ b {1, 3} 両方に2が有るので、それ以外が表示される >>> a.symmetric_difference(b) {1, 3} >>> c = {4,5} >>> a.symmetric_difference(c) {1, 2, 4, 5} 両方ともで被っているものはないので、全て表示される >>>
<=またはissubset()を使うと部分集合になっているかどうかをチェックできる
>>> a <= b False >>> >>> d = {1,2} >>> a <= d dはaの要素を全て含んでいるのでTrueが返る True >>> d = {1,2,3} >>> d {1, 2, 3} >>> a <= d dはaの要素を全て含んでいるのでTrueが返る True >>>
補足
<を使うと真部分集合になっているかどうかをチェックできる >=を使うと上位集合になっていえるかどうかをチェックできる >を使うと真上位集合になっているかどうかをチェックする。