はじめに
ここでは、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, in TypeError: '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, in KeyError: '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#
関連記事




