Pythonの文法、基礎の基礎:特集:Visual Studioで始めるPythonプログラミング(3/4 ページ)
今回は、Pythonの制御構造と、リスト/タプル/辞書/集合という4つのデータ型について超速で見ていく。
辞書
辞書は「キー/値」の組の集合である。連想配列といってもよい。リストやタプルは順序を持つ(それらの大小を比較できる)が、辞書には順序がない。以下に例を示す。
>>> d = { 'forum1': 'Windows Server Insider', # 文字列をキーとした辞書の作成
... 'forum2': 'Insider.Net',
... 'forum3': 'Server & Storage' }
...
>>> d['forum1']
'Windows Server Insider'
>>> d.items() # キー/値の列挙
dict_items([('forum1', 'Windows Server Insider'), ('forum3', 'Server & Storage'), ('forum2', 'Insider.Net')])
>>> d.keys() # キーの列挙
dict_keys(['forum1', 'forum3', 'forum2'])
>>> d.values() # 値の列挙
dict_values(['Windows Server Insider', 'Server & Storage', 'Insider.Net'])
>>> d['forum4'] = 'Coding Edge' # 要素の追加
>>> d
{'forum1': 'Windows Server Insider', 'forum3': 'Server & Storage', 'forum2': 'Insider.Net', 'forum4': 'Coding Edge'}
>>> d.update({'forum3': 'System Insider'}) # 要素の書き換え
>>> d.update(forum4='Server & Storage') # 要素の書き換え
>>> d
{'forum1': 'Windows Server Insider', 'forum3': 'System Insider', 'forum2': 'Insider.Net', 'forum4': 'Server & Storage'}
>>> d2 = { 0: 'Windows Server Insider', # 整数値をキーとした辞書の作成
... 1: 'Insider.NET',
... 2: 'Server & Storage' }
...
>>> d2[0]
'Windows Server Insider'
>>> d3 = { (0, 0): 'Windows Server Insider', # タプルをキーとした辞書の作成
... (0, 1): 'Insider.NET',
... (1, 0): 'Server & Storage' }
...
>>> d3[(1,0)]
'Server & Storage'
>>> d4 = dict([('forum1', 'Windows Server Insider'), # dict()関数を使用
... ('forum2', 'Insider.NET'),
... ('forum3', 'Server & Storage')])
...
>>> d4
{'forum1': 'Windows Server Insider', 'forum3': 'Server & Storage', 'forum2': 'Insider.NET'}
>>> d5 = dict(forum1='Windows Server Insider', forum2='Insider.NET')
>>> d5
{'forum1': 'Windows Server Insider', 'forum2': 'Insider.NET'}
辞書オブジェクトはdictクラスのインスタンスであり、上で見たように、キー/値の組、キー、値のそれぞれについて辞書ビュー(辞書の内容の変更に動的に追随する、反復可能なオブジェクト)を返送するitemsメソッド、keysメソッド、valuesメソッドを持つ。
また、組み込みのdict関数を使用すると、2つの要素で構成されるタプル(を含むリストなど)から辞書を作成できる。最後の例では、dict関数にキーワード引数とその値を指定して辞書を作成している。
Pythonの辞書で重要なのは、キーには不変値を含むことはできない。簡単にいえば、リストや辞書を(別の)辞書のキーとすることはできないことに注意(リストを要素に含むタプルもキーにはできない)。
集合
集合はその名の通り、数学的な集合を表すためのものだ。集合にある値が含まれているかどうかのチェックや、集合間の各種演算がサポートされている。辞書と同様に、集合にも順序はない。また、集合には変更可能な「集合」(set)と変更不可能な「frozenset」の2種類がある。
以下に例を示す。集合は辞書と同様に{}を使用して記述する(ただし、辞書はキー/値の組を並べていったが、集合では単一要素を並べていく)。また、frozensetは作成したら変更はできないので、何らかの要素を基にしてfrozenset関数を呼び出すことで作成する。
>>> s1 = { "Windows Server Insider", "Insider.NET", "System Insider" }
>>> s2 = s1.copy()
>>> s2.add("Coding Edge")
>>> s1
{'System Insider', 'Windows Server Insider', 'Insider.NET'}
>>> s2
{'System Insider', 'Windows Server Insider', 'Coding Edge', 'Insider.NET'}
>>> s2 - s1 # 差集合
{'Coding Edge'}
>>> s2.difference(s1) # 差集合
{'Coding Edge'}
>>> s2.intersection(s1) # 共通集合
{'System Insider', 'Windows Server Insider', 'Insider.NET'}
>>> s1 >= s2 # s1がs2を包含しているか
False
>>> s2 >= s1 # s2がs1を包含しているか
True
>>> s1 ^ s2 # 対称差(どちらかにのみ含まれている要素からなる集合)
{'Coding Edge'}
>>> s1.add("Server & Storage") # s1に要素を追加
>>> s1 ^ s2 # 対称差
{'Server & Storage', 'Coding Edge'}
>>> s2 > s1 # もはやs1はs2の部分集合ではない
False
>>> s3 = { "Build Insider" }
>>> s3.isdisjoint(s1) # s3とs1は互いに素(共通する要素を持たない)
True
>>> fs = frozenset(s1) # s1を基にfrozensetを作成
>>> fs
frozenset({'Server & Storage', 'System Insider', 'Windows Server Insider', 'Insider.NET'})
>>> fs.add("Build Insider") # frozensetは変更不可能
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
set関数を使うと、リストなど、他のオブジェクトから集合を作成することもできる。
>>> lst
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>> s4 = set(lst) # set関数を利用してリストから集合を作成
>>> s4
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> d
{'forum1': 'Windows Server Insider', 'forum3': 'Server & Storage', 'forum2': 'Insider.Net'}
>>> s5 = set(d) # set関数を利用して辞書から集合を作成。値は落とされ、キーだけが残る
>>> s5
{'forum1', 'forum3', 'forum2'}
>>> s6 = set(d.items()) # set関数に辞書ビュー(反復可能オブジェクト)を渡して、集合を作成
>>> s6
{('forum2', 'Insider.Net'), ('forum3', 'Server & Storage'), ('forum1', 'Windows Server Insider')}
Copyright© Digital Advantage Corp. All Rights Reserved.