はじめに

ここでは、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#