要素の「集まり」色々

Python には、複数の要素を扱うためのデータ構造がいくつかあります。 個別の紹介をするまえに、少しデータ構造の関係を見ておきましょう。 strbytes などは、以前説明したので省略。

こちらで用いたコードは、以下に配置しておきます

あと、組み込み型@公式文書の説明も良かったらどうぞ

range

整数の数え上げに用いられるデータ構造です。for文などでよく利用。

range(5)   # 0, 1, 2, 3, 4 相当
range(2, 5)  # 2, 3, 4 相当
range(2, 10, 2) # 2, 4, 6, 8 相当
range(2, -2, -1) # 2, 1, 0, -1 相当

start, end, step を指定して数え上げをおこない、1引数の場合はstart:0, step:1 として扱い、2 引数の場合は step:1 として扱います。

range(1000) と書いたら、「1000まで数え上げをおこなう『ための』データ構造」ができるのであって、0, 1, .., 999 という要素数 1000個のデータ構造を作成するのでは「ない」です

list

同種のデータの集まり(順序あり、重複許容)です。まあ、C言語の配列に似てますが、要素を追加・削減することもできます。詳しくはlistのページで。

int_lst = [ 0, 1, 2, 3 ]  # 0, 1, 2, 3 からなる list
int_lst2 = list(range(4)) # range(4) 相当の list を作成
str_lst = [ 'a', 'ab', 'abc' ] # str の list
str_lst2 = list(str_lst) # str_lst のコピー
str_lst.append('abcd') # str_lst に 'abcd' を追加

注目してほしいのは、list(range(4))range のように順番にアクセスできるもの (iterable) を引数に渡すと、順次アクセスして list にします。 list(str_lst) でも同様に str_lst のコピーを作成します。

tuple

異種のデータの組を表します。一度、組を作成したら、後から代入したり、要素追加とかしません。こういう一度作成したら「変えない」データ構造を、immutable といいます。str, bytes とかもそう。list は mutable つまり、変化OKです。

tpl0 = (1, 'ok')  # 1  と 'ok' の組
tpl1 = 1, 'ok'    # 文法上問題ないなら、() は省略可
tpl2 = tuple(range(3))  # 0, 1, 2 の組

シーケンス型演算

range, tuple, list など、並びを表すものは、サイズ取得 (len()) など、共通にサポートする機能があります。詳しくはlistのページでも紹介します。

lst6 = [1, 2] * 3  # [ 1, 2]を3つつなげた [1, 2, 1, 2, 1, 2] 作成
bool0 = 2 in lst6  # lst6 に 2 が含まれる (True)か否か(False)
count = lst6.count(1) # lst6 に含まれる 1 の個数
a, b, c, d, e, f = lst6 # lst6 の要素を a, b, c, d, e, f として取得
x, y = 3, 4  # (3, 4) という tuple を作って、x, y に割当て

set

集合を表し、list とは違って、要素順が無視され、要素の重複もなしです。代わりに in 演算が速いです。

set1 = {0,1,2,3,4}
set2 = set(range(5))
print(3 in set1)

dict

dictionary (辞書)型です。key に対して value (値)を割り付けます。key-value 型とか、mapping (写像)型とか連想配列 (associative array/list) などと呼ばれるデータ構造の一種です。key による検索は高速です。 詳しくはdictのページでも紹介します。

dct = {'key0': 10, 'key1': 20} 
dct['key2'] = 30  # {'key0': 10, 'key1': 20, 'key2': 30} になる

Read more