Python : データ構造
参考書籍 : Python実践入門, Python3スキルアップ教科書
・None : 値が存在しないことを表現する特殊な値
Noneはシングルトンなので、None is NoneはTrue
・文字列
# 文字列に演算子を使える print("Hello " + "World!") # 文字列の演算 # 文字列はイテラブル、取り出される一つずつもまた文字列 for c in "abcd": print(c) # 文字列に変数を埋め込む方法4種類 title = "book" print(f"python practice {title}") # 文字列内へ変数を埋め込む print(f"{title.upper()=}") # 文字列内の変数や式に=をつけると、変数や式と評価結果を文字列にできる print("python practice {}".format(title)) # Python2.6から使えるformatを使ったやり方 print("python practice %s" % (title)) # %を使う方法、非推薦
・list
リストの作成方法
# []で作る方法と、list()にイテラブルなオブジェクト渡す方法がある items = ["note", "notebook", "sketchbook"] book = list("book") # ['b', 'o', 'o', 'k']
リストの演算や関数の例
items.append("paperbook") # 末尾に追加 items = items + ["book"] + ["comic"] # リストの結合 items.pop(0) # 削除、引数は削除するインデックス del items[0] # del文での削除
リストへのアクセス。インデックスでのアクセスと、スライスでのアクセス
items[-2] # 末尾から2つ目、インデックスでアクセス items[0:len(items):2] # 0から末尾まで2つおき、スライスでアクセス
インデックスは↓の図がわかりやすい
・tuple : あとから要素の追加や削除ができないコンテナ
タプルの作成方法
# ()や,で作る方法と、tuple()にイテラブルなオブジェクト渡す方法がある items = ("note", "notebook", "sketchbook") items = "note", "notebook", "sketchbook" # ()はなくても良い item = (1,) # 要素が1のtupleはカンマをつける item = "note", # tupleになってしまうので注意 items = tuple(["note", "notebook", "sketchbook"])
タプルへのアクセスも、インデックスとスライスでアクセスできる
items[-2] # tupleもインデックス、スライスでアクセスできる items[0:2]
・set : 一意な要素の集合を管理するコンテナ、順序を持たない
setの作成方法
# {}で作成する方法と、set()にイテラブルなオブジェクト渡す方法がある items = {"note", "notebook", "sketchbook"} items = set(["note", "notebook", "sketchbook"]) items = {"note", "note", "notebook", "sketchbook"} # 重複した要素は一つになる # {'notebook', 'sketchbook', 'note'} items = {} # これは空のdictになるので注意
setの操作
items.add("comic") items.pop() # 要素の削除、順序がないので削除される要素は不定 # items[0] # 順序がないためインデックスでアクセスできない # 集合演算 set_a = {"note", "notebook", "sketchbook"} set_b = {"book", "rulebook", "sketchbook"} print(set_a | set_b) # 和集合 {'rulebook', 'note', 'book', 'notebook', 'sketchbook'} print(set_a - set_b) # 差集合 {'note', 'notebook'} print(set_a & set_b) # 積集合 {'sketchbook'} print(set_a ^ set_b) # 対象差 {'book', 'note', 'notebook', 'rulebook'}
・frozenset : 不変なset
frozensetの作成
items = frozenset(["note", "notebook", "sketchbook"]) # frozenset()のみで作成できる
frozensetも集合演算を行える
・dict : キーと値の組み合わせを扱う辞書コンテナ
dictの作成方法
# {}で作成する方法と、dictを使う方法がある items = {"note": 1, "notebook": 2, "sketchbook": 3} items = dict(note=1, notebook=2, sketchbook=3) # dict()での作成 items = {} # 空のdict items = {("book",): 1} # 数値、文字列、タプルなど不変なオブジェクトはキーにできる
dictの操作
items["book"] = 4 # 要素の追加 items.pop("notebook") # 要素の削除 del items["sketchbook"] # del文での削除 items.get("comic") # dict.get()での取得なら存在しない要素でもKeyError例外にならない
dictをfor文で使う
dict.items()を使いkeyとvalueを取得できる
items = {"note": 1, "notebook": 2, "sketchbook": 3} for k, v in items.items(): # keyとvalue print(k + " " + str(v), end=" ")
dict.keys()でkeyのみ、dict.values()でvalueのみを取り出せる
・内包表記
内包表記を利用することで、簡潔にコンテナを作成できる
リスト内包表記の場合、[リストの要素 for 変数 in イテラブル]と書く
items = [i * 2 for i in range(10)]
if節を追加して、作成する要素に条件をつけられる
items = [i * 2 for i in range(10) if i % 2 == 0]
タプル、集合、辞書も内包表記で作成できる
items = tuple(i * 2 for i in range(10)) # tuple items = {i * 2 for i in range(10)} # set items = {str(i): i * 2 for i in range(10)} # dict
タプルの内包表記を書こうとして、()を使ってしまうとジェネレータ式になってしまうので注意