はじめに
前々回に少しデータ型の話をしましたが、今回は、前々回で説明した「integer」「float」「string」「boolean」の基本データ型を組み合わせて格納することができるデータ型である「複合データ型」の説明をしたいと思います。
リスト
まず複合データ型として「リスト」について説明します。 リストは、コンマ区切りの値 (要素) の並びを角括弧で囲むことで作成できます。
>>>weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
前回の記事で説明した文字列の場合と同様、インデックス表記によって要素を取り出すこともできます。
>>>weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] >>>weekdays[0] 'Monday' >>>weekdays[4] 'Friday'
なお、文字列の場合とは異なり、リストはmutable(変更可能)なので、インデックス表記により書き換えることもできます。
>>>members = ['sato','suzuki','takahashi'] >>>members[1] = 'tanaka' >>>members ['sato','tanaka','takahashi']
リストに要素を追加するにはappend()を利用します。
>>>members.append('kimura') >>>members ['sato','tanaka','takahashi','kimura']
リスト同士を結合する場合は、extend()もしくは「+=」を利用します。
>>>members = ['sato','suzuki','takahashi'] >>>others = ['tanaka','chimera','ando'] #extend()を利用 >>>members.extend(others) >>>members ['sato','suzuki','takahashi','tanaka','chimera','ando'] #+=を利用 >>>members += others >>>members ['sato','suzuki','takahashi','tanaka','chimera','ando']
リストから要素を削除するにはremove()を利用します。
>>>members = ['sato','suzuki','takahashi'] #suzukiを削除する >>>members.remove('suzuki') >>>members ['sato','takahashi']
タプル
リストに似た複合データ型としてPythonには「タプル」があります。 リストと異なるのはimmutable(変更不可)という点です。
つまり、リストの場合は実行できた「追加」や「削除」をタプルでは実行することはできません。いわば、「タプル」は定数リストのようなものだといえます。
タプルは、コンマ区切りの値 (要素) の並びを丸括弧で囲むことで作成できます。 ※正確には丸括弧で囲む必要はありませんが、丸括弧で囲んだほうがタプルだとわかりやすいので本記事では丸括弧で囲むと説明しています。
>>>weekdays_tuple = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday') #下記のように定義することの可能 >>>weekdays_tuple = 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
辞書
辞書とは、任意のオブジェクトをキーとして別のオブジェクトに対応づける複合データ型のことです。
リストと同様に複数の値を格納することができますが、それぞれの値に対して任意のキーを対応づけることができます。
Rubyでいうところのハッシュ、Javaでいうマップ、PHPでいう連想配列に相当するものです。
辞書は、key:valueのペアをカンマで区切り、それぞれのペアをコンマ区切りで並べ、波括弧で囲むことで作成できます。
>>>members = { 'tanaka':'kenta', 'yamada':'misaki', 'takada':'takuya', }
リストはインデックス表記によって要素を取り出すことができましたが、辞書ではキーを使って要素を取り出すことができます。
>>>members['tanaka'] 'kenta'
ただし、指定したキーが存在しない場合、エラーが発生します。
>>>members['sato'] Traceback (most recent call last): File "", line 1, in KeyError: 'sato'
エラーを回避するには、get()を使用すると良いです。 getは引数としてキーとオプションを指定することができ、キーが存在しない場合はオプションで指定した値が返されます。なお、オプションを指定しなかった場合はNoneになります。
>>>members.get('sato','not found') 'not found' >>>members.get('sato')
続いて、辞書のすべてのキーを取得するにはkeys()を利用します。また、辞書のすべての値を取得するにはvalues()を利用します。すべてのキーと値を取得するにはitems()を利用します。
>>>members = { 'tanaka':'kenta', 'yamada':'misaki', 'takada':'takuya', } >>>members.key() dict_keys(['tanaka', 'yamada', 'takada']) >>> members.values() dict_values(['kenta', 'misaki', 'takuya']) >>> members.items() dict_items([('tanaka', 'kenta'), ('yamada', 'misaki'), ('takada', 'takuya')])
ちなみにPython3の場合、keys()、values(),items()の返り値はdict_keys(),dict_values(),dict_items()オブジェクトになるので、Python2の時のように、それらをリストに変換するには、list()を使用する必要があります。
>>> list(members.keys()) ['tanaka', 'yamada', 'takada'] >>> list(members.values()) ['kenta', 'misaki', 'takuya'] >>> list(members.items()) [('tanaka', 'kenta'), ('yamada', 'misaki'), ('takada', 'takuya')]
辞書はmutable(変更可能)なので、キーを利用して値を書き換えたり、値を追加することができます。
辞書に指定したキーが既にある場合は、既存の値を新しい値に書き換え、辞書に指定したキーがない場合は、キーと値の両方を辞書に追加されます。
#「tanaka」というキーは既に存在しているので書き換えらえる >>>members['tanaka'] = 'daisuke' >>>members {'tanaka': 'daisuke', 'yamada': 'misaki', 'takada': 'takuya'} #「yamamoto」というキーは存在しないので辞書に追加される >>>members['yamamoto'] = 'daisuke' >>>members {'tanaka': 'daisuke', 'yamada': 'misaki', 'takada': 'takuya', 'yamamoto': 'daisuke'}
辞書同士を結合する場合は、update()を利用します。
#辞書1を用意 >>>members = { 'tanaka':'kenta', 'yamada':'misaki', 'takada':'takuya', } #辞書2を用意 >>>others = { 'yoshida':'haruka', 'inoue':'taiki', } #辞書1と辞書2を結合 >>>members.update(others) >>>members {'tanaka': 'kenta', 'yamada': 'misaki', 'takada': 'takuya', 'inoue': 'taiki', 'yoshida': 'haruka'}
辞書から要素を削除するにはdelを使用します。
>>>members = { 'tanaka':'kenta', 'yamada':'misaki', 'takada':'takuya', } >>>del members['tanaka'] >>>members {'yamada': 'misaki', 'takada': 'takuya'}
すべての要素を削除するにはclear()を使用します。
>>>members = { 'tanaka':'kenta', 'yamada':'misaki', 'takada':'takuya', } >>>members.clear() >>>members {}
今回は以上です。
続き、記載しました。