はじめに

ここでは、Pythonで扱うデータの型を紹介します。データの型は、プログラムの中で値をどのように扱うかを定義するとともに、データの型特有の操作を行うことができます。

では、まずは基本的なデータの型について紹介します。


基本的なデータの型

Pythonの基本的なデータの型は、次のものがあります。

  • 文字列型
  • 数値型(整数、浮動小数点数、虚数、論理値)

これらについては、すでに「いまさら始めるPython3(2)-文字列の扱い」と「いまさら始めるPython3(3)-数値と演算子の扱い」で説明していますので、ここでは割愛します。


コレクションのデータの型

コレクションとは、複数のデータをひとまとめにして扱うものです。Pythonでは、リスト(list)、タプル(tuple)、辞書(dict)、集合(set)という4つのデータの型があります。以下に、それぞれについての特徴を説明します。


リスト(list)

リストは、複数の基本的なデータの型の値を複数個まとめて管理するデータの型です。リストには、定義した順番で値が管理されます。このような順序管理を行っている型を「シーケンス型」と呼びます。例えば、文字列もシーケンス型のデータの型です。

リストを定義するためには、「[」「]」でくくり、値をカンマ「,」で区切って順番に羅列します。例えば、次のようにリストを定義します。

>>> ['string',1.23,10,1+2j]
['string'1.2310(1+2j)]
X

リストでは、次のような操作を行うことができます。

値の追加

リストの最後に新たな値を追加する場合は、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']
X

途中に値を挿入(insert)

>>> sample_list=['t','o','m','z']
>>> sample_list.insert(3,'i')
>>> print(sample_list)
['t''o''m''i''z']
X

さらに、複数の値を挿入したり、リストに別のリストを連結することもできます。

途中に複数の値を挿入(スライス)

リストにコロン「:」を指定すと、その位置に複数の値を追加することができます。

>>> sample_list=['t','o','z','o']
>>> sample_list[2:0] = ['m','i']
>>> print(sample_list)
['t''o''m''i''z''o']
X

なお、スライスそのものは、シーケンス型のデータについて部分的にアクセスする構文で、「開始位置:終了位置:スライスの増分」のように定義します。上記は、リストの特定部分にアクセスして値を挿入するため、開始位置に挿入位置を指定し、終了位置を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']
X

また、リストの結合結果を新たなリストにする場合、「+」でリストの連結を行うことができます。

>>> 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']
X

タプル(tuple)

タプルは、リストと同様に複数のデータの型の値を複数個まとめて管理するデータの型です。タプルを定義するためには、「(」「)」でくくり、値をカンマ「,」で区切って順番に羅列します。タプルも、シーケンス型のため、定義した順番で値が管理されます。

タプルは、リストとほぼ同様ですが、タプルは一度作ったオブジェクトは、二度と変更できないという違いがあります。つまり、値を追加したり挿入したりすることができません。このような一度作ったら二度と値を変更できないものを「イミュータブル(immutable)」と言い、反対に値を変更できるもの「ミュータブル(mutable)」と言います。もし、値を変更しようとすると以下のようにエラーとなります。

>>> tomizo_tuple = ('t','o','m','i','z','o')
>>> tomizo_tuple[0:2] = ('z','y')
Traceback (most recent call last):
File ""line 1in
TypeError'tuple' object does not support item assignment
X

なお、タプルは、値が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'}
X

値の参照

辞書の値を取得する場合は、キーを指定して値を取得します。辞書にないキーを指定すると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 1in
KeyError'other'
X

要素の追加と値の更新

辞書に新たな要素を追加する場合は、すでにあるキーを指定して値を設定します。すでにあるキーの値を更新する場合は、すでにあるキーを指定して値を設定します。(辞書に指定したキーが無い場合は追加され、有る場合は値が更新されます)

>>> 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'}
X

要素の削除

辞書にある要素を削除する場合は、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}
X

辞書の操作の詳細は、以下のURLにありますので、必要に応じて参照してください。
Python3 ドキュメント マッピング型(dict)

集合(set)

集合は、リストと同様に複数のデータをまとめたものですが、以下の点がリストと異なります。
・要素に順番が無い
・重複した要素(値)が無い

例えば、リストから集合を作る場合、

>>> setdata = set([1,2,2,3,3,3])
>>> print(setdata)
{123}
X

のように、重複した要素(値)は取り除かれます。

集合(set)の基本操作

setは、以下のような操作が行えます。

要素数の取得:len(set)

>>> print(setdata)
{123}
>>> len(setdata)
3
X

要素の追加:add(要素)

>>> setdata = set([1,2,2,3,3,3])
>>> print(setdata)
{123}
>>> setdata.add(5)
>>> print(setdata)
{1235}
X

集合から要素を削除:discard(要素),remove(要素),pop(),clear()

>>> #discard()
... setdata = set([1,2,2,3,3,3])
>>> print(setdata)
{123}
>>> setdata.discard(2)
>>> print(setdata)
{13}
>>> setdata.discard(0)
>>> print(setdata)
{13}
>>> #remove()
... setdata = set([1,2,3])
>>> print(setdata)
{123}
>>> setdata.remove(2)
>>> print(setdata)
{13}
>>> setdata.remove(0)
Traceback (most recent call last):
  File "<stdin>"line 1in <module>
KeyError0
>>> #pop()
... setdata = set([1,2,3])
>>> print(setdata)
{123}
>>> print(setdata.pop())
1
>>> print(setdata)
{23}
>>> print(setdata.pop())
2
>>> print(setdata)
{3}
>>> #clear()(
... setdata = set([1,2,3])
>>> print(setdata)
{123}
>>> print(setdata.clear())
None
X

setは、集合なので、各種の集合演算が可能です。集合演算とは、集合同士の和・積・差・対称差があります。
それぞれの演算は、以下のように集合演算が行えます。また、部分集合かどうかの判定もできます。

>>> seta = set([1,2,3])
>>> setb = set([3,4,5])
>>>  (|)
... seta | setb
{12345}
>>>  (&)
... seta & setb
{3}
>>>  (-)
... seta - setb
{12}
>>>  (^)
>>> seta ^ setb
{1245}
>>> 
... setc = set([2,3])
>>> setc.issubset(seta)
True
>>> seta.issubset(setc)
False
>>> 
... seta.issuperset(setc)
True
>>> setc.issuperset(seta)
False
X

今回のデータ型についての記事はここまでです。
上記の紹介はあくまで概要ですので、Pythonのデータ型についての詳細は、公式ドキュメントを参照してください。

Python公式ドキュメント:https://docs.python.jp/3/library/stdtypes.html#