LoginSignup
0
1

More than 3 years have passed since last update.

いまさらPython3(データ構造編)

Last updated at Posted at 2019-10-27

はじめに

自分用の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)の組み合わせで管理する。変更可能体である。

Dictionaryの例
dic = {'k1':1111, 'k2':2222}
dic['k3'] = 3333 # 新しいキーの追加
dic['k1'] = 4444 # 値の置き換え

書式:{key1:value1, key2:value2}

集合(set)

重複しない値の集まり。
変更可能体はset型、変更不能体はflozenset型。

setの例
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')
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1