Pythonの文法、基礎の基礎:特集:Visual Studioで始めるPythonプログラミング(4/4 ページ)
今回は、Pythonの制御構造と、リスト/タプル/辞書/集合という4つのデータ型について超速で見ていく。
コンテナに共通の操作
ここまでに見てきたリスト、タプル、辞書、集合などの「コンテナ」オブジェクト(他の要素への参照を格納するオブジェクト)には共通する操作があるので、ここで幾つか見ておこう。最初にコレクションを適当に作成しておく。
>>> l = list(range(10)) # リスト、タプル、辞書、集合の作成
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> t = tuple(zip(l, "abcdefghij"))
>>> t
((0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'))
>>> d = dict(t)
>>> d
{0: 'a', 1: 'b', 2: 'c', 3: 'd', 4: 'e', 5: 'f', 6: 'g', 7: 'h', 8: 'i', 9: 'j'}
>>> s = set(l)
>>> s
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
上ではリストを基に、適当に他の3種類のコレクションを作成した。タプルの作成で使用しているzip関数は引数に渡されたシーケンス型のオブジェクトまたは反復可能なオブジェクトを基に、それらを組にしたタプル(のイテレータ)を返送するものだ。ここではそれをtuple関数に渡して整数と文字列を要素とするタプルを作成している。
まずここで見たコンテナは全て反復可能(iterable、イテラブル)である。反復可能なオブジェクトは、一度に1つずつその要素を返送できる。これらは上で見たようなforループでの反復処理に使用できる。以下に例を示す(実行結果は省略)。
>>> for num in l:
... print(num)
>>> for num, c in t:
... print("{0}: {1}".format(num, c))
>>> for num, c in d.items():
... print("{0}: {1}".format(num, c))
>>> for num in s:
... print(num)
また、コンテナに要素が含まれているかどうかの存在判定も可能である。これは「値in コンテナ」もしくは「値 not in コンテナ」の形式で判定できる。
>>> 9 in l # リストに9が含まれているか
True
>>> 11 in l # リストに11が含まれているか
False
>>> 100 not in l # リストに100が含まれていないか
True
>>> (0, 'b') in t # タプルに(0, 'b')が含まれているか
False
>>> (0, 'a') in t # タプルに(0, 'a')が含まれているか
True
>>> 'a' in d # 辞書の存在判定はキーを対象とする
False
>>> 0 in d # 辞書の存在判定はキーを対象とする
True
>>> 100 in s # 集合に100が含まれているか
False
>>> 100 not in s # 集合に100が含まれていないか
True
コンテナに含まれる要素の数は組み込みのlen関数で取得できる。
リストとタプルで共通の操作
リストとタプルの2つのシーケンス型ではさらに共通に利用できる操作が提供されている。例えば、先ほど見た要素のスライスがそうだ。また、indexメソッドによる要素の検索、countメソッドによる出現回数の数え上げもそうである。これ以外には、リストやタプルの比較、連結、最小値/最大値の取得などが挙げられる。比較や最小値/最大値の取得が行えるのは、シーケンス型のオブジェクトには順序性があるからだ。以下に例を示す。
>>> import random # randomモジュールのインポート
>>> l1 = [random.randrange(20) for x in range(10)] # リストの内包表記による乱数リストの作成
>>> l2 = [random.randrange(20) for x in range(10)]
>>> l1
[3, 10, 16, 8, 0, 18, 14, 15, 12, 11]
>>> l2
[8, 12, 6, 13, 8, 19, 17, 0, 4, 5]
>>> l1 == l2 # リストの比較
False
>>> l1 > l2
False
>>> l2 > l1
True
>>> l3 = [8, 12, 6, 13, 8, 19, 17, 0, 4, 6] # 最終要素だけl2と違うリストl3を作成
>>> l3 > l2 # l3の方がl2よりも大きい
True
>>> t1 = tuple(l1) # l1を基にタプルt1を作成
>>> t1
(3, 10, 16, 8, 0, 18, 14, 15, 12, 11)
>>> max(t1) # t1に含まれる要素の最大値
18
>>> min(t1) # t2に含まれる要素の最小値
0
文字列
最後に文字列操作(の一部)についても紹介しておこう。というのは、Pythonでは文字列もシーケンス型に分類されるからだ。つまり、文字列は文字が連続したもので、順序性を持ち、反復可能である。そのため、その要素のスライスも可能だし、辞書式順序での比較が可能だ。
>>> s = "Insider.net"
>>> s
'Insider.net'
>>> for c in s: # 反復処理
... print(c)
...
I
n
s
i
d
e
r
.
n
e
t
>>> s[-4:] # 文字列のスライス(インデックス-4から文字列末尾までをスライス)
'.net'
>>> s1 = s.upper()
>>> s2 = s.lower()
>>> s1
'INSIDER.NET'
>>> s2
'insider.net'
>>> s1 < s2 # 文字列を辞書式順序で比較
True
本稿ではPythonの構文の基礎知識と、リストをはじめとする各種のコンテナオブジェクトについて見てきた。次回は関数やクラス、リストの高度な話題について紹介する予定だ。
Copyright© Digital Advantage Corp. All Rights Reserved.