理由はそのうち考える

まずやってみよう

Python学習メモ:データ構造

gihyo.jp

データ構造

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 ドキュメントを参照。