Pythonには4つの組み込みデータ構造があります。
- リスト
- 辞書
- 集合
- タプル
これらについて簡単にまとめます。もし誤り等あればご指摘いただけると幸いです。
(より正確かつ詳しい内容はPython公式ドキュメントを参照してください。)
リスト
リストは**「オブジェクトの順序付き可変コレクション」です。
順序付きというのは、リスト内の各データにインデックスがついている**ということ、
可変というのは、拡張や縮小ができるということです。
基本的な操作
作成:data = []
、list()
データ入力:data = [1, 2, 3]
データ出力:data[index]
拡張:data.append()
、data.insert()
、data.extend()
縮小:data.remove()
、data.pop()
削除:data.clear()
>>> alphabet = ['a', 'b', 'c'] # リストを定義
>>> type(alphabet) # 型を確認
<class 'list'>
>>> alphabet.append('e') # alphabetの要素に'e'を追加
>>> alphabet
['a', 'b', 'c', 'e']
>>> alphabet.insert(3, 'd') # インデックス3の位置に'd'を追加
>>> alphabet
['a', 'b', 'c', 'd', 'e']
>>> alphabet.pop() # リストの末尾の要素を削除して返す
'e'
>>> alphabet
['a', 'b', 'c', 'd']
辞書
辞書は**「キーと値のペアの順序なし可変コレクション」**です。
キーは辞書内で一意であり、順序はありません。
基本的な操作
作成:data = {}
、dict()
データ入力:data = {key1:value1, key2:value2, key3:value3}
データ入力:data = dict(key1=value1, key2=value2, key3=value3)
データ出力:data[key]
拡張:data[key] = value
、data.setdefault(key, value)
縮小:data.pop(key)
、data.popitem()
削除:data.clear()
>>> fruits = {'apple':100, 'banana':120, 'cherry':200} # 辞書を定義
>>> type(fruits) # 型を確認
<class 'dict'>
>>> fruits['apple'] # キーが'apple'の値を返す
100
>>> fruits['durian'] = 300 # キーが'durian'、値が300のペアを追加
>>> fruits
{'apple': 100, 'banana': 120, 'cherry': 200, 'durian': 300}
>>> fruits.setdefault('fig', 500) # キーが'fig'、値が500のペアを追加し、その値を返す
500
>>> fruits
{'apple': 100, 'banana': 120, 'cherry': 200, 'durian': 300, 'fig': 500}
>>> fruits.setdefault('banana', 150) # setdefaultメソッドで指定したキーが既にある場合は変更や追加はせず、指定したキーの値を返す
120
>>> fruits
{'apple': 100, 'banana': 120, 'cherry': 200, 'durian': 300, 'fig': 500}
>>> fruits.pop('cherry') # キーが'cherry'のキーと値のペアを削除し、その値を返す
200
>>> fruits
{'apple': 100, 'banana': 120, 'durian': 300, 'fig': 500}
>>> fruits.items() # 辞書のキーと値のペアを返す。ループ処理でよく使う。
dict_items([('apple', 100), ('banana', 120), ('durian', 300), ('fig', 500)])
>>> sorted(fruits.values()) # 辞書の値をソートして返す
[100, 120, 300, 500]
集合
集合は**「重複のないオブジェクトの順序なし可変コレクション」です。
重複のないとはその言葉通り、重複値を禁止しています。
集合の和、積、差などの数学的な演算が可能です。
検索が主な目的である場合は、集合の方がリストに比べて高速**です。
基本的な操作
作成:data = set()
データ入力:data = {'a', 'b', 'c'}
拡張:data.add()
縮小:data.remove()
、data.pop()
削除:data.clear()
>>> vowels = set('aeeiiioooouuuuu') # set関数で集合を定義
>>> vowels
{'i', 'e', 'u', 'o', 'a'}
>>> type(vowels) # 型を確認
<class 'set'>
>>> word = 'python'
>>> u = vowels.union(set(word)) # 集合vowelsとwordを集合にしたものとの和集合を取る
>>> u
{'n', 'i', 't', 'e', 'u', 'y', 'o', 'h', 'p', 'a'}
>>> sorted(u) # ソートして返すことも可能
['a', 'e', 'h', 'i', 'n', 'o', 'p', 't', 'u', 'y']
>>> d = vowels.difference(set(word)) # 集合vowelsとwordを集合にしたものとの差集合を取る
>>> d
{'i', 'u', 'a', 'e'}
>>> i = vowels.intersection(set(word)) # 集合vowelsとwordを集合にしたものとの積集合を取る
>>> i
{'o'}
タプル
タプルは**「オブジェクトの順序付き不変コレクション」です。
一度タプルにオブジェクトを割り当てたら、そのタプルは変更できません**。
オブジェクトを自分(や他の人)が書いたコードで変更できないようにしたい場合に使います。
基本的な操作
作成:data = ()
、tuple()
データ入力:data = ('a', 'e', 'i', 'o', 'u')
データ出力:data[index]
削除:del data
>>> vowels = ('a', 'e', 'i', 'o', 'u') # タプルを定義(母音のデータなど、変更が起こりえないものはタプルが適している)
>>> vowels
('a', 'e', 'i', 'o', 'u')
>>> type(vowels) # 型を確認
<class 'tuple'>
>>> vowels[2]
'i'
>>> t = ('Python',) # 要素が1つだけのタプルを定義する場合は最後にカンマが必要
>>> type(t)
<class 'tuple'>
>>> t
('Python',)
>>> t2 = ('Python') # カンマがないと文字列として定義される
>>> type(t)
<class 'str'>
>>> t
'Python'
その他
Pythonは上記のデータ構造を組み合わせた複合データ構造も扱えます。
例えば「リストの集合」や「辞書のタプル」などです。
以下に「辞書を含む辞書」の例を示します。
>>> score = {}
>>> score['Alice'] = {'math':80, 'science':90, 'history':70}
>>> score
{'Alice': {'math': 80, 'science': 90, 'history': 70}}