Beyond The Limit

はじまりは2001年

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
>>>

補足

<を使うと真部分集合になっているかどうかをチェックできる

>=を使うと上位集合になっていえるかどうかをチェックできる

>を使うと真上位集合になっているかどうかをチェックする。