はじめに
ここでは、Pythonで扱うデータの型を紹介します。データの型は、プログラムの中で値をどのように扱うかを定義するとともに、データの型特有の操作を行うことができます。
では、まずは基本的なデータの型について紹介します。
基本的なデータの型
Pythonの基本的なデータの型は、次のものがあります。
- 文字列型
- 数値型(整数、浮動小数点数、虚数、論理値)
これらについては、すでに「いまさら始めるPython3(2)-文字列の扱い」と「いまさら始めるPython3(3)-数値と演算子の扱い」で説明していますので、ここでは割愛します。
コレクションのデータの型
コレクションとは、複数のデータをひとまとめにして扱うものです。Pythonでは、リスト(list)、タプル(tuple)、辞書(dict)、集合(set)という4つのデータの型があります。以下に、それぞれについての特徴を説明します。
リスト(list)
リストは、複数の基本的なデータの型の値を複数個まとめて管理するデータの型です。リストには、定義した順番で値が管理されます。このような順序管理を行っている型を「シーケンス型」と呼びます。例えば、文字列もシーケンス型のデータの型です。
リストを定義するためには、「[」「]」でくくり、値をカンマ「,」で区切って順番に羅列します。例えば、次のようにリストを定義します。
>>> ['string',1.23,10,1+2j]['string', 1.23, 10, (1+2j)]
リストでは、次のような操作を行うことができます。
値の追加
リストの最後に新たな値を追加する場合は、append(値)を使用します。また、リストの特定の位置に値を追加する場合は、insert(場所,値)を使用します。
最後に値を追加(append)
>>> sample_list=['t','o','m','i','z']>>> print(sample_list)['t', 'o', 'm', 'i', 'z']>>> sample_list.append('o')>>> print(sample_list)['t', 'o', 'm', 'i', 'z', 'o']
途中に値を挿入(insert)
>>> sample_list=['t','o','m','z']>>> sample_list.insert(3,'i')>>> print(sample_list)['t', 'o', 'm', 'i', 'z']
さらに、複数の値を挿入したり、リストに別のリストを連結することもできます。
途中に複数の値を挿入(スライス)
リストにコロン「:」を指定すと、その位置に複数の値を追加することができます。
>>> sample_list=['t','o','z','o']>>> sample_list[2:0] = ['m','i']>>> print(sample_list)['t', 'o', 'm', 'i', 'z', 'o']
なお、スライスそのものは、シーケンス型のデータについて部分的にアクセスする構文で、「開始位置:終了位置:スライスの増分」のように定義します。上記は、リストの特定部分にアクセスして値を挿入するため、開始位置に挿入位置を指定し、終了位置を0にすることで挿入する値の数分の挿入ができるわけです。
リストの連結
リストに新たに複数の値のリストを追加する場合は、リストの連携を行うextend(リスト)を使用します。
>>> tomizo_list1 = ['t','o','m','i','z','o']>>> tomizo_list2 = ['_','n','o','.','2']>>> tomizo_list1.extend(tomizo_list2)>>> print(tomizo_list1)['t', 'o', 'm', 'i', 'z', 'o', '_', 'n', 'o', '.', '2']
また、リストの結合結果を新たなリストにする場合、「+」でリストの連結を行うことができます。
>>> tomizo_list1 = ['t','o','m','i','z','o']>>> tomizo_list2 = ['_','n','o','.','2']>>> tomizo_list = tomizo_list1+tomizo_list2>>> print(tomizo_list)['t', 'o', 'm', 'i', 'z', 'o', '_', 'n', 'o', '.', '2']
タプル(tuple)
タプルは、リストと同様に複数のデータの型の値を複数個まとめて管理するデータの型です。タプルを定義するためには、「(」「)」でくくり、値をカンマ「,」で区切って順番に羅列します。タプルも、シーケンス型のため、定義した順番で値が管理されます。
タプルは、リストとほぼ同様ですが、タプルは一度作ったオブジェクトは、二度と変更できないという違いがあります。つまり、値を追加したり挿入したりすることができません。このような一度作ったら二度と値を変更できないものを「イミュータブル(immutable)」と言い、反対に値を変更できるもの「ミュータブル(mutable)」と言います。もし、値を変更しようとすると以下のようにエラーとなります。
>>> tomizo_tuple = ('t','o','m','i','z','o')>>> tomizo_tuple[0:2] = ('z','y')Traceback (most recent call last):File "", line 1, inTypeError: 'tuple' object does not support item assignment
なお、タプルは、値が1つの時も、カンマ「,」を最後につける必要があります。また、「(」「)」を省略することもできます。
辞書(dict)
辞書も、リストやタプルと同様に複数のデータの型の値を複数個まとめて管理するデータの型ですが、リストやタプルと違って、順序は管理しません。代わりにキー(key)と対応する値(value)の組み合わせで値を管理します。辞書を定義するためには、「{」「}」でくくり、キーと値を「キー:値」のようにコロン(:)を使って表現し、これらをカンマ「,」で区切って羅列します。例えば、以下のように定義します。
>>> tomizo_prop = {'name':'tomizo_no.2','age':42,'hobby':'PC'}>>> print(tomizo_prop){'name': 'tomizo_no.2', 'age': 42, 'hobby': 'PC'}
値の参照
辞書の値を取得する場合は、キーを指定して値を取得します。辞書にないキーを指定するとKeyErrorが発生します。
>>> tomizo_prop = {'name':'tomizo_no.2','age':42,'hobby':'PC'}>>> name = tomizo_prop['name']>>> print(name)tomizo_no.2>>> age = tomizo_prop['age']>>> print(age)42>>> hobby = tomizo_prop['hobby']>>> print(hobby)PC>>> other = tomizo_prop['other']Traceback (most recent call last):File "", line 1, inKeyError: 'other'
要素の追加と値の更新
辞書に新たな要素を追加する場合は、すでにあるキーを指定して値を設定します。すでにあるキーの値を更新する場合は、すでにあるキーを指定して値を設定します。(辞書に指定したキーが無い場合は追加され、有る場合は値が更新されます)
>>> tomizo_prop = {'name':'tomizo_no.2','age':42,'hobby':'PC'}>>> tomizo_prop['weight'] = '90kg'>>> print(tomizo_prop){'name': 'tomizo_no.2', 'age': 42, 'hobby': 'PC', 'weight': '90kg'}>>> tomizo_prop['age'] = 43>>> print(tomizo_prop){'name': 'tomizo_no.2', 'age': 43, 'hobby': 'PC', 'weight': '90kg'}
要素の削除
辞書にある要素を削除する場合は、del文を使います。また、要素の値を取得して削除する場合はpopメソッドを使います。
>>> tomizo_prop = {'name': 'tomizo_no.2', 'age': 43, 'hobby': 'PC', 'weight': '90kg'}>>> del tomizo_prop['weight']>>> print(tomizo_prop){'name': 'tomizo_no.2', 'age': 43, 'hobby': 'PC'}>>> delvalue = tomizo_prop.pop('hobby')>>> print(delvalue)PC>>> print(tomizo_prop){'name': 'tomizo_no.2', 'age': 43}
辞書の操作の詳細は、以下のURLにありますので、必要に応じて参照してください。
Python3 ドキュメント マッピング型(dict)
集合(set)
集合は、リストと同様に複数のデータをまとめたものですが、以下の点がリストと異なります。
・要素に順番が無い
・重複した要素(値)が無い
例えば、リストから集合を作る場合、
>>> setdata = set([1,2,2,3,3,3])>>> print(setdata){1, 2, 3}
のように、重複した要素(値)は取り除かれます。
集合(set)の基本操作
setは、以下のような操作が行えます。
要素数の取得:len(set)
>>> print(setdata){1, 2, 3}>>> len(setdata)3
要素の追加:add(要素)
>>> setdata = set([1,2,2,3,3,3])>>> print(setdata){1, 2, 3}>>> setdata.add(5)>>> print(setdata){1, 2, 3, 5}
集合から要素を削除:discard(要素),remove(要素),pop(),clear()
>>> #discard(要素)・・・集合に存在しない値は何もしない... setdata = set([1,2,2,3,3,3])>>> print(setdata){1, 2, 3}>>> setdata.discard(2)>>> print(setdata){1, 3}>>> setdata.discard(0)>>> print(setdata){1, 3}>>> #remove(要素)・・・集合に存在しない値はエラー... setdata = set([1,2,3])>>> print(setdata){1, 2, 3}>>> setdata.remove(2)>>> print(setdata){1, 3}>>> setdata.remove(0)Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: 0>>> #pop()・・・集合から要素を削除し、その値を返す。... setdata = set([1,2,3])>>> print(setdata){1, 2, 3}>>> print(setdata.pop())1>>> print(setdata){2, 3}>>> print(setdata.pop())2>>> print(setdata){3}>>> #clear()・・・すべての要素を削除する。(空集合にする)... setdata = set([1,2,3])>>> print(setdata){1, 2, 3}>>> print(setdata.clear())None
setは、集合なので、各種の集合演算が可能です。集合演算とは、集合同士の和・積・差・対称差があります。
それぞれの演算は、以下のように集合演算が行えます。また、部分集合かどうかの判定もできます。
>>> seta = set([1,2,3])>>> setb = set([3,4,5])>>> # 和 (|)... seta | setb{1, 2, 3, 4, 5}>>> # 積 (&)... seta & setb{3}>>> # 差 (-)... seta - setb{1, 2}>>> # 対称差 (^)>>> seta ^ setb{1, 2, 4, 5}>>> # 部分集合かどうかの判定... setc = set([2,3])>>> setc.issubset(seta)True>>> seta.issubset(setc)False>>> # 部分集合かどうかの判定... seta.issuperset(setc)True>>> setc.issuperset(seta)False
今回のデータ型についての記事はここまでです。
上記の紹介はあくまで概要ですので、Pythonのデータ型についての詳細は、公式ドキュメントを参照してください。
Python公式ドキュメント:https://docs.python.jp/3/library/stdtypes.html#
関連記事




