リストと辞書
リスト
リストでは複数の値を順序をつけて保持することができます。
Python でのリスト型はコンマ区切りの値 (要素) の並びを角括弧で囲んだものとして表現されます。
リストは通常は同じ型の要素を持ちますが、異なる型の要素を含めても問題ありません。
code: python
>> a
>> a
空のリストを作りたいときは次のように記述します。
code: python
>> a=[]
>> type(a)
<class 'list'>
>> b=list()
>> type(b)
<class 'list'>
リストはインデックスやスライスや連結といった操作が行えます。
インデックス は特定の位置にあるリストを返すことができます。
ただし、インデックスが大きすぎるとエラーになります。
code: python
>> a
1
34
8
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
スライス はリストの特定の範囲をコロン記号の前後の数字で表現して、その範囲にあるリストを返すことができます。
code:python
リストの連結
+ 記号で連結することで2つのリストを連結して新しいリストを作成することができます。
code:python
>> b
code: python
>> a
リストへの挿入と追加
リストのある特定の場所に要素を挿入したり、リストに要素を追加する場合はメソッドを呼んで処理します。
メソッドというのはオブジェクトが持っている関数で特定の用途を処理するために用意されています。 組み込み関数 dir() にオブジェクトを与えるとそのメソッドを知ることができます。
code: python
>> dir(a)
'__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort' ここで、insert と append があるのがわかります。
組み込み関数 help() で使いかたを知ることができます。
code: python
>> help(a.insert)
Help on built-in function insert:
insert(index, object, /) method of builtins.list instance
Insert object before index.
>> help(a.append)
Help on built-in function append:
append(object, /) method of builtins.list instance
Append object to the end of the list.
リストオブジェクトの insert() と append() メソッドは次のように使います。
code: python
>> a
>> a.insert(1, 12) # a の1番目の位置に12を挿入
>> a
>> a.append(55) # a の末尾に55を追加
>> a
リストの連結でプラス記号(+) を使いましたが、Pythonがリストオブジェクトの __add__() メソッドで処理しています。
code: python
>> a
辞書型
リストが整数でインデックスされているのに対して、辞書型はキー(Key)を使ってインデックスされます。
辞書のKeyに使えるものは不変型(immutable) でなければいけない制約があります。 つまり、Keyとして使えるものは次のものです。
文字列
数値
Python の辞書は集合と同様に中括弧({}) もしくは dict() で生成できます。
code: python
>> tel = {'jack': 4098, 'sape': 4139}
>> tel
{'jack': 4098, 'sape': 4139}
>> countries = dict(日本='JP', アメリカ='US', 中国='CN')
>> countries
{'日本': 'JP', 'アメリカ': 'US', '中国': 'CN'}
辞書オブジェクトにKeyでアクセスすることで値(Value) を取得したり置き換えたりできます。
code: python
>> tel = {'jack': 4098, 'sape': 4139}
4098
5489
辞書にないKeyでValueを与えた場合は辞書に追加されます。
code: python
>> tel = {'jack': 4098, 'sape': 4139}
>> tel
{'jack': 4098, 'sape': 4139}
>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
Python3.5以降では、辞書オブジェクトを連結することができます。
code: python
>> x = {'a': 1, 'b': 2}
>> y = {'b': 3, 'c': 4}
>> z = {**x, **y}
>> z
{'c': 4, 'a': 1, 'b': 3}
辞書オブジェクトのKeyからリストを作るためには次のように記述します。
code: python
>> list(tel.keys())
>> sorted(tel.keys())
辞書オブジェクトのValueからリストを取得したい場合は上記のkeys部分をvaluesに変更します。
Keyが存在するかどうは次のようにしてわかります。
code: python
>> 'jack' in tel
True
>> 'mick' in tel
False
その他のデータ型
リストや辞書の他にも以下のような「タプル」や「集合」といったデータ型があります。リストや辞書を理解して使えるようになったら「タプル」や「集合」についても調べてみましょう。
不変型バージョンのリストである「タプル」
code: python
>> a=(1, 'two', 3)
>> a
(1, 'two', 3)
重複する要素をもたず順序のない要素の集まりを表現できる「集合(set)」
code: python
>> a = set('abcdefg')
>> a
{'f', 'c', 'a', 'b', 'g', 'e', 'd'}
実践ドリル