データ構造#

今までは、ブール値、整数、浮動小数点数、文字列という基本データ型を説明ました。ここからは、これらの基本データ型を要素としてまとめて取り扱うデータとしての構造について説明します。

タプル(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()メソッド を使うことで指定した要素がシーケンスに何個格納されているか調べることができます

今まで紹介されたデータ型の中に、シーケンスであるデータ型は何ですか