< 前の記事 | Web講座TOP | 次の記事 >

初心者向け Pythonパイソン講座 - 第7回「タプルと辞書(中級者向け)」

投稿者:3G 大毛


今回は新たなデータ型であるタプルと辞書について勉強します。この2つについては必ず知っていないといけないというわけではありませんので、プログラミングを初めて勉強する人や時間のない人は第8回へ進んでください。後で必要になった時に戻ってくればOKです。



タプル(中級者向け)


リストとほとんど同じ機能を持ちながら、データの変更ができない型として「タプル」が用意されています。例えば [a,b,c] というリストに対応するタプルは丸カッコ()を使ってこのように書きます:


(a,b,c)


データの実体としては、リストがルーズリーフのアドレス帳なら、タプルはノートのアドレス帳です。 リストの方は後からページの内容を書き換えたり、ページを抜き差ししたりすることができますが、タプルの方はいったん作ったら内容の変更もページの抜き差しもできません。


Pythonのリストはルーズリーフのアドレス帳
Pythonのタプルはノートのアドレス帳

あまりデータの変更をしないリストがある場合、かわりにタプルを使うとメモリの使用量が少なく、実行速度の速いプログラムを書ける場合があります。データの性質によってプログラマがリストとタプルのどちらを使うかを選択できるようになっています。はじめのうちは、リストだけを使うのもよいでしょう。


タプルの作成


実際にタプルを作ってみましょう。好きに選んだ3つのデータを1つにまとめたタプルAを作り、AのデータとAの型を表示してみてください:


A=(0.123e-4, 'abc', [0,1,2,3])
print(A)
print(type(A))


いろいろなデータ型を要素として持つタプルが作成されました。タプルはtupleタプル型であることが分かります。


タプルの使い方


タプルの使い方は、文字列の使い方とほとんど同じです。以下にあげることは文字列と全く同じ書き方でできます:


機能表記例(A,B:タプル、m,n:整数)
インデックスを使った要素の読み取りA[m]
スライスを使った要素の読み取り(部分タプルの作成)A[m:n]
len関数を使った長さの取得len(A)
タプルの結合A+B
タプルの繰り返しA*n
2つのタプルが等しいA==B
2つのタプルが等しくないA!=B
辞書式順序で未満(上級者向け)A<B
辞書式順序で以下(上級者向け)A<=B

からタプル


長さが0のタプルをからタプルといいます。空タプルは次のように書きます:


()


1-タプル


長さがnのタプルをn-タプルといいます。ところで、1-タプルを書くにはどうすればよいでしょうか。素直に(1)と書いてもこれはただの整数の1になってしまいます。1-タプルだけは特別に次のように書きます:


(a,)

実はリストやタプルは、最後の要素の直後にコンマを書いても良いということになっています。例えば、長さ3のリストやタプルは次のように書いてもOKです:


[a,b,c,]
(a,b,c,)

ですから言い換えると、1-タプルだけは最後のコンマが省略できないということになります。


カッコの省略(上級者向け)


ビックリするかもしれませんが、タプルの両端のカッコは省略できます(ただし、空タプルは除きます)。例えば、3-tupleを次のどちらかのように書くことが可能です:


a,b,c
a,b,c,

(注:関数の入力として使う場合や、記号の優先順位の関係で別の意味になってしまう場合はカッコは省略できません。)


辞書じしょ(中級者向け)


リストはルーズリーフのアドレス帳でした。リストのルーズリーフをバラバラにして1枚1枚に名前シールを貼りつけたものが辞書じしょというデータ型です。もはやルーズリーフではないので、カルタのセットと考えましょう。


Pythonの辞書はカルタのセット

このカルタには順番は決まっていません。カルタの1枚1枚は「要素」と言い、表面おもてめんにはデータの名前、裏面うらめんにはデータのアドレスが書かれています。表面に書かれた名前のことを「キー」といいます。キー(key)はかぎという意味です。カルタは差し替えたり追加したりすることができますが、同じキーのカルタがあってはいけません。


 ◆ 「シーケンス型とマッピング型」 ◆ (※クリックして展開して下さい

リスト・文字列・タプルのようなデータ型は「シーケンス型」といいます。シーケンス(sequence)とは連続した整数のインデックスを持つデータの集まりのことです。これに対し、辞書は「マッピング型」といいます。マッピングのインデックスはキーと呼び、連続した整数でなくても構いません。今のところマッピング型は辞書だけです。マッピング(mapping)は日本語では「写像しゃぞう」と呼ばれます。

辞書の作成


辞書を作るには次のように書きます:


{'key1':data1, 'key2':data2, 'key3':data3}

ここで文字列 'key1', 'key2', 'key3' はカルタ表面のキーを表し、data1, data2, data3はそれぞれのカルタに対応するデータを表します。本講座では辞書のキーは原則として文字列を使うことにします。数値をキーにすることも可能です。キーとして使えるデータについて正確に知りたい人は下のコラムを読んでください。


それでは辞書を実際に作ってみましょう:


A = {'a':0, 'b':1, 'c':2}
print(A)
print(type(A))


辞書Aが作成され、dict型であることが分かりました。dictは辞書を意味するdictionaryディクショナリーの略です。


 ◆ 「辞書のキーとして使えるデータ」 ◆ (※クリックして展開して下さい

リストや辞書のような可変型のデータは辞書のキーとして使うことができません。一方、不変型のデータは基本的に使えますが、使えないこともあります。文字列や数値はキーとして使うことができます。タプルは不変型ですが、使えないことがあります。

正確には、辞書のキーとして使えるのは「ハッシュ可能」と呼ばれるデータです。ハッシュ可能なデータは次の通りです:

● 文字列、数値、True、False、Noneなど
● 空タプル
● すべての要素がハッシュ可能なタプル

つまり、ハッシュ可能なタプルというのは大ざっぱに言うと、「どんどん中身を調べていくと最後には文字列か数値か空タプルなどに行き着く」ようなタプルです。

(注:これ以外にもハッシュ可能なデータはありますが、本講座で扱う予定のないものは省略しています。)

要素の読み取り


辞書の要素を読み取るにはキーを指定します。いま、変数 A は辞書 {'a':0, 'b':1, 'c':2} を表すとしましょう。例えば、キー'b'に対応するデータは ”A['b']” と書いて読み取ります:


A = {'a':0, 'b':1, 'c':2}
A['b']


存在しないキーを指定するとエラーになります。


A['d']


要素の差し替え・追加


辞書の要素を差し替えるにはキーを指定して代入します。辞書Aのキー”b”のデータを「-10」に差し替えるには ”A['b'] = -10” と書きます:


A = {'a':0, 'b':1, 'c':2}
A['b']=-10
print(A)


辞書の要素を追加する場合もまったく同様にキーを指定して代入します。辞書Aにキー”d”とデータを「3」を追加するには ”A['d'] = 3” と書きます:


A = {'a':0, 'b':1, 'c':2}
A['d']=3
print(A)


キーの存在の確認


キーが存在するかどうかで、要素への代入の動作が変わってくることが分かりました。辞書に特定のキーが存在するかどうかを調べることが重要になりそうです。辞書Aにキー'a'が存在するか調べるには「'a' in A」と書きます。判定結果はbool型です。


A = {'a':0, 'b':1, 'c':2}
'a' in A


単純に真偽を逆にした「'a' not in A」という書き方も用意されています。


A = {'a':0, 'b':1, 'c':2}
'a' not in A


これは論理演算子notを使って「not ( 'a' in A )」と書くのと同じことになります。


要素の削除


辞書の要素を削除するにはキーを指定してdel文を使います:


A = {'a':0, 'b':1, 'c':2}
del A['b']
print(A)


要素の数の取得


辞書にある要素の数、つまりカルタの枚数はlen関数で取得できます:


A = {'a':0, 'b':1, 'c':2}
len(A)


からの辞書


要素を何も持っていない辞書をからの辞書と言います。空の辞書は次のように書きます:


{}





Pythonにはこの他にも集合しゅうごうsetセット型)やその不変型バージョンの凍結とうけつ集合(frozensetフローズンセット型)というデータ型が用意されていますが本講座では扱いません。



< 前の記事 | Web講座TOP | 次の記事 >

TOP