はじめに
自分用のPython3として基本的なデータ構造を記載する。正確性より実用性を重視する。
(Javaや.NETを主に使ってる自分が、Pythonを使うためのページです)
Pythonの制御構造は、いまさらPython3(制御構造編)へ
Pythonのデータモデルの考え方
...(前略)...。Python プログラムにおけるデータは全て、オブジェクトまたはオブジェクト間の関係として表されます。(ある意味では、プログラムコードもまたオブジェクトとして表されます。...(後略)...)
(引用)Python言語リファレンス 3.データモデルより
このように、Pythonはすべてのデータをオブジェクトとして扱う。このことを知っているとPythonを理解しやすい。
数値型(数値オブジェクト)
型名 | 区分 | 内容 |
---|---|---|
int | 整数型 | 無制限範囲の整数を表現 |
bool | 整数型 | TrueまたはFalseを表現 |
float | 実数型 | 倍精度浮動小数点数 |
complex | 複素数型 | 複素数を表現(倍精度浮動小数点を2つ) |
- 数値オブジェクトは、変更不能体(immutable)
単一の値しかない型
- None:存在しないを示す値。真偽値はFalse。
- NotImplemented:実装していないことを示す値。真偽値はTrue。
- Ellipsis:何かが存在していることを示す値(リテラル'...'など)。真偽値はTrue。
シーケンス型
変更不能体型名 | 生成例 | 変更可能体型名 | 生成例 | |
---|---|---|---|---|
文字列 | string | "ABC" | - | - |
配列 | tuple | (1,2,3,"ABC") | list | [1,2,3,"ABC"] |
バイト | bytes | b"\x41\x42\x43" | bytearray | bytearray(b"\x41\x42\x43") |
インデックスとスライシング
インデックス
シーケンスの要素にアクセスする。
word = 'Python'
print(word[1]) # yが出力される
print(word[-1]) # nが出力される
書式:シーケンスオブジェクト名[インデックス]
インデックスが0以上の場合、シーケンスの先頭から要素にアクセスする。0が先頭の要素、長さ-1が末尾にアクセスする。
インデックスが-1以下の場合、末尾からアクセスする。-1が末尾の要素、-1×シーケンスの長さが先頭にアクセスする。
スライス
シーケンスの一部を切り出す。新たなシーケンスを作成する(深いオブジェクトのコピーはしない)
squares = [1, 3, 9, 16,25]
print(squares[0:2]) # [1, 3]が出力される
print(squares[0:5:2]) # [1, 9, 25]が出力される
print(squares[-3:-1]) # [9, 16]が出力される
print(squares[-1:-6:-2]) # [25, 9, 1]が出力される
書式:シーケンスオブジェクト[開始インデックス:終了インデックス:ステップ]
開始インデックスと終了インデックスの指定は、インデックスの指定と同じ。
ステップは、指定した値置きのシーケンスを作る。値の正が先頭から末尾へ、負は末尾から先頭への指定となる。
マッピング型(Dictionary)
Pythonの組み込み型では、Dictionary型1つである。
Dictionaryは、キー(key)と値(value)の組み合わせで管理する。変更可能体である。
dic = {'k1':1111, 'k2':2222}
dic['k3'] = 3333 # 新しいキーの追加
dic['k1'] = 4444 # 値の置き換え
書式:{key1:value1, key2:value2}
集合(set)
重複しない値の集まり。
変更可能体はset型、変更不能体はflozenset型。
basket = {'apple', 'orange', 'banana'}
if 'orange' in basket:
print('Yeah! orange!')
else:
print('Oh! my God!')
書式:{value1, value2, value3}
呼び出し可能型
関数呼び出しができる型。関数を定義することで生成される。
Pythonは、関数もオブジェクトとして扱うことができる。
def func(val):
print("I'm func. val=" + val)
f = func # 関数の定義オブジェクトを、変数fに代入する
f('ABC')