要素の「集まり」色々
Python には、複数の要素を扱うためのデータ構造がいくつかあります。
個別の紹介をするまえに、少しデータ構造の関係を見ておきましょう。
str
や bytes
などは、以前説明したので省略。
こちらで用いたコードは、以下に配置しておきます
あと、組み込み型@公式文書の説明も良かったらどうぞ
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} になる