Python学習メモ:データ構造
データ構造
None
C++やC#などのnullに相当し、シングルトンである。
条件式で使うと偽となる。あるオブジェクトがNoneかどうかを判定するにはisを使用する。
==がeq()をオーバーライドして結果を変えられるため。isの場合はその心配がない。
hoge = None if hoge is None: print(‘hoge is None’) else: print(‘hoge is not None')
bool型
True/False。Pythonではbool()を用いることですべてのオブジェクトが真理値判定できる。
bool(None) # False bool(‘hoge’) # True
ブール演算には or, and, not の3つがある。or, andともに真ならboolを返すのではなく、オブジェクトが返るところに注意。andの場合、x and y が真ならyが返る。
x = 1 y = 2 x or y # 1が返る x = None x or y # 2が返る x = 2 x and y # 2が返る
数値型
Pythonではint, float, complex(複素数型)の3つがある。異なる型を含む演算の結果の型は complex > float > int となる。
complexを含む場合はcomplex、floatとintならfloatとなる。演算子は四則演算に加えて、%(剰余)、//(結果の切り捨て)、**(n乗)がある。
2 ** 2 # 2の2乗
数値に_(アンダースコア)を入れると見やすくかける。
1_000_000 # 1000000
文字列型
Pythonではstrが文字列型にあたる。シングルクォートまたはダブルクォートで文字列型となる。
文字列中の改行は¥nで可能だが、’’’ または “”” でも可能。カッコでくくられた複数の連続する文字列は1つの文字列として見なされる。
長い文字列を見やすい単位で区切ったりするときに使える。
hoge = (‘ho’ ’ge’ ) print(hoge) # ‘hoge'
文字列に対して * と数値を使用すると、数値回繰り返した文字列になる。なおもとのオブジェクトはそのままなので、別の変数に代入するなどして使用する。
hoge = ‘hoge’ print(hoge*5) #hogehogehogehogehoge
Pythonには f-string という文字列リテラルがある。先頭にfをつけて定義し、文字列中に{}でくくった変数や式を記述すると、実行時に置換される。
fruit = ‘an apple’ f’This is {fruit}.’ # ’this is an apple.'
ちなみにPythonではstrオブジェクトが標準で存在しているので、うっかり変数名にstrを使用しないようにする。
配列
Pythonで配列を扱うデータ型にはlistとtupleがある。listは[]を使って初期化する。またlist()を使用すると、新しいリストを作ることができる。
list(‘hoge’) # [‘h’,’o’,’g’,'e']
追加はappend、挿入はinsert、削除はpop、removeがある。そのほかのメソッドについては5. データ構造 — Python 3.8.6rc1 ドキュメントを参照のこと。
items = [‘hoge’] items.append(‘fuga’) # [‘hoge’, ‘fuga’] items.insert(1’piyo’) # [‘hoge’, ‘piyo’, ‘fuga’] print(items.pop(2) # [‘hoge’, ‘piyo’]
リストに対して、変数名[先頭のインデックス:末尾のインデックス]とすると、その範囲のリストが作成でき、これをスライスという。
items = [‘hoge’, ‘piyo’, ‘fuga’] items[0:2] # [‘hoge’, ‘piyo’]
tupleは不変な配列を扱う。定義すると以後は変更ができない。
,(カンマ)で初期化すればタプルが作成できるが、可読性を上げるためにカッコを使うことが多い。
辞書型
Pythonではdictで辞書を扱う。
{key1:value1, key2:value2, … }と初期化する。またdict()でも作成できる。
items = {‘hoge’:1, ‘piyo’:2}
追加は新しいキーを指定して値を代入すればよい。削除はlistと同じくpop()やdel文を使用する。 詳細は組み込み型 — Python 3.8.6rc1 ドキュメントを参照。
集合
setとfrozensetがあり、配列(list, tuple)と異なる点は要素の重複を許さず、順番を保持しない点。
setの初期化には{}を用い、{要素1, 要素2, …}とする。set()から作成できる点もほかのデータ型と同じ。
items = {‘hoge’, ‘piyo’} items.add(‘fuga’) # 追加 items.remove(‘piyo’) # 削除
順番を持たないため、インデックスでのアクセスはできない。またpop()で要素を取り出せるが、何が返ってくるかは不定となっている。さらにfor文にも使用できるが、これも順番は不定。
frozenset型は不変なset。
setは集合型なので集合演算が可能。 |, -, &, ^ などで集合同士の演算ができる。 set,frozensetの詳細については、組み込み型 — Python 3.8.6rc1 ドキュメントを参照。