データ構造#
今までは、ブール値、整数、浮動小数点数、文字列という基本データ型を説明ました。ここからは、これらの基本データ型を要素としてまとめて取り扱うデータとしての構造について説明します。
タプル(tuple)#
タプルは、固定長で変更不可能(immutable)な一連のPythonオブジェクトの集合です。タプルでは、構成する要素としてあらゆる型のデータを指定できます。
タプルの作成#
タプルを作成するには、色々な方法があります。
コンマで値を区切ります
tup= 4, 5, 6
tup
(4, 5, 6)
構成する要素をコンマで区切り全体を括弧
(...)で囲みます
tup= (4, 5, 6)
tuple関数で他のシーケンスとイテレータを使ってタプルに変換する
str_tuple=tuple("string")
str_tuple
('s', 't', 'r', 'i', 'n', 'g')
タプルのタプルも作成できます
nested_tuple= (4, 5, 6), (7, 8)
nested_tuple
((4, 5, 6), (7, 8))
+による連結する
tup+str_tuple
(4, 5, 6, 's', 't', 'r', 'i', 'n', 'g')
*による繰り返し
tup*3
(4, 5, 6, 4, 5, 6, 4, 5, 6)
タプルの操作#
文字列と同じように、タプルの要素は
[]で参照できます。
tup[0]
4
nested_tuple[0]
(4, 5, 6)
nested_tuple[0][0]
4
lenタプルを構成する要素を数えます。
len(tup)
3
タプルを書き換えることはできないです。
tup[0]=1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[11], line 1
----> 1 tup[0]=1
TypeError: 'tuple' object does not support item assignment
リスト#
リストは、可変長で変更可能(mutable)な一連のPythonオブジェクトの集合です。つまり、タプルとは異なり、リスト内容は直接に変更できます。
リストの作成#
構成する要素をコンマで区切り全体をかき括弧
[...]で囲みます
list_a=[1,2,3]
list_a
[1, 2, 3]
list関数で他のシーケンスとイテレータを使ってタプルに変換する
list_b=list(tup)
list_b
[4, 5, 6]
リストの操作#
リストはミュータブルであるため、新しい要素を追加したり、既存の要素を削除、置換したりできます。
appendによる末尾への要素の追加
list_a.append(4)
list_a
['Weber', 'Weber', 'Parsons', 'Marx', 'Giddens', 'Durkheim', 4]
insertによる特定の位置に要素を挿入
list_a.insert(1, "Weber")
list_a
['Weber', 'Weber', 'Weber', 'Parsons', 'Marx', 'Giddens', 'Durkheim', 4]
extendによるリストの連結
list_a.extend(list_b)
list_a
['Weber',
'Weber',
'Weber',
'Parsons',
'Marx',
'Giddens',
'Durkheim',
4,
4,
5,
6]
スライスによるリストの要素を書き換え
list_a[5]= "Marx"
list_a
['Weber', 'Weber', 'Weber', 'Parsons', 'Marx', 'Marx', 'Durkheim', 4, 4, 5, 6]
list_a[5:]= ["Marx","Durkheim","Parsons"]
list_a
['Weber', 'Weber', 'Weber', 'Parsons', 'Marx', 'Marx', 'Durkheim', 'Parsons']
removeによる値を指定した要素を削除
list_a.remove(1)
list_a
['Weber', 2, 3, 4, 'Marx', 'Durkheim', 'Parsons']
delによる特定の位置の要素を削除
del list_a[1]
list_a
['Weber', 3, 4, 'Marx', 'Durkheim', 'Parsons']
popによる指定して要素を取り出し、削除する方法
list_a.pop(1)
3
=による代入
list_a[1]="Giddens"
list_a
['Weber', 'Giddens', 'Marx', 'Durkheim', 'Parsons']
inによる要素の有無を確認
'Weber' in list_a
True
'Merton' in list_a
False
sortによる要素の並べ替え
sortメソッドはリスト内の要素を並べ替えます。 引数に何も指定しなければ昇順でとなります。
要素が文字列なら、アルファベット順でソードされます。
list_a.sort()
list_a
['Durkheim', 'Giddens', 'Marx', 'Parsons', 'Weber']
reverse=True引数を追加すれば降順になります・
list_a.sort(reverse=True)
list_a
['Weber', 'Parsons', 'Marx', 'Giddens', 'Durkheim']
セット(set)#
セット(set)は、重複しない要素の集合です。
セットの作成#
構成する要素をコンマで区切り全体を波括弧
{...}で囲みます
set_a={1,2,2,4}
set_a
{1, 2, 4}
set()関数で作成する。
set_b=set(['Durkheim', 'Giddens', 'Marx', 'Marx','Parsons', 'Weber'])
set_b
{'Durkheim', 'Giddens', 'Marx', 'Parsons', 'Weber'}
セットの操作#
len()による要素数の取得
len(set_a)
3
add()による要素の追加
set_b.add('Merton')
set_b
{'Durkheim', 'Giddens', 'Marx', 'Merton', 'Parsons', 'Weber'}
remove()による要素の削除
set_b.remove('Merton')
set_b
{'Durkheim', 'Giddens', 'Marx', 'Parsons', 'Weber'}
セットの集合演算#
セットは、数学的な集合演算をサポートします。
セットの和
set_b.union(set_a)
{1, 2, 4, 'Durkheim', 'Giddens', 'Marx', 'Parsons', 'Weber'}
セットの積は、両方のセットに存在する要素が含まれます。
set_b.intersection(set_a)
set()
辞書(dict)#
辞書(dictionary)は、キー(key)と値(value)のペアを格納するデータ構造です。キーはユニークである必要があり、値は重複して格納することができます。
辞書はミュータブルなので、キーと値要素を追加、削除、変更することは可能です。
辞書の作成#
辞書は波括弧{}で囲まれ、キーと値のペアはコロン:で区切って並べ、{key:value}という形で作れます。
辞書にキーとして使用できるのは、イミュータブル型(例えば、整数、浮動小数点数、文字列、タプルなど)しか使用できません。
辞書のキーはユニークである必要があります。
nation={
"Marx": "German",
"Weber": "German",
"Durkheim":"France",
"Parsons":"America"
}
birth=dict(Marx=1818, Weber=1864, Durkheim=1858, Parsons=1902)
birth=dict([("Marx",1818), ("Weber",1864), ("Durkheim",1858), ("Parsons",1902)])
辞書に要素の追加・変更#
キーを使って要素を参照し、値を代入することで辞書に要素を追加できます。
nation["Merton"]="America"
nation
{'Marx': 'German',
'Weber': 'German',
'Durkheim': 'France',
'Parsons': 'America',
'Merton': 'America'}
キーはユニークでなければならないので、キーを複数回使った場合、最後の値が辞書に保留されます。
birth["Merton"]=1911 # 間違い
birth
{'Marx': 1818,
'Weber': 1864,
'Durkheim': 1858,
'Parsons': 1902,
'Merton': 1911}
birth["Merton"]=1910 # 正しい値
birth
{'Marx': 1818,
'Weber': 1864,
'Durkheim': 1858,
'Parsons': 1902,
'Merton': 1910}
要素の取得#
辞書のもっとも一般的な用途は、キーを指定して、対応する値を取り出すことです。
nation["Durkheim"]
'France'
nation.get("Durkheim")
'France'
keys()によるすべてのキーの取得
nation.keys()
dict_keys(['Marx', 'Weber', 'Durkheim', 'Parsons', 'Merton'])
values()によるすべての値の取得
nation.values()
dict_values(['German', 'German', 'France', 'America', 'America'])
items()によるキー・値ペアの取得
nation.items()
dict_items([('Marx', 'German'), ('Weber', 'German'), ('Durkheim', 'France'), ('Parsons', 'America'), ('Merton', 'America')])
len()による長さの取得
len(nation)
5
update()による辞書の結合
nation2=dict(Goffman="America", Giddens="England", Habermas="Germany")
nation.update(nation2)
nation
{'Marx': 'German',
'Weber': 'German',
'Durkheim': 'France',
'Parsons': 'America',
'Merton': 'America',
'Goffman': 'America',
'Giddens': 'England',
'Habermas': 'Germany'}
delによる指定したキーを持つ要素の削除
del nation['Giddens']
nation
{'Marx': 'German',
'Weber': 'German',
'Durkheim': 'France',
'Parsons': 'America',
'Merton': 'America',
'Goffman': 'America',
'Habermas': 'Germany'}
下の表が社会学者の没年を示している。社会学者の名前をキー、没年を値として辞書を作ってください。
名前 |
没年 |
|---|---|
Marx |
1883 |
Weber |
1864 |
Durkheim |
1917 |
Mertonの没年である2003を先の辞書に追加してください。
Marxの享年を計算してください。
シーケンス#
これまで色々なデータ型そして操作方法を勉強しました。その中に、集約する要素が一定の順序で並んでいて、その順序(インデックス)を使ってその要素を指定できる種類のオブジェクトをシーケンスといいます。
シーケンスであるデータ型は以下の特徴があります。
インデックスで要素にアクセスができます
スライス:要素をインデックスで範囲指定し、まとめて取得することができます
長さの取得ができます
要素の出現回数:
count()メソッド を使うことで指定した要素がシーケンスに何個格納されているか調べることができます
今まで紹介されたデータ型の中に、シーケンスであるデータ型は何ですか