この記事では、Pythonの配列(コレクション)の種類と特徴について解説します。
Pythonで配列と言えば大抵は「リスト(List)」のことを指します。
リストとは、複数の要素を順序付けして保存できるコンテナ型のデータ構造であり、異なるデータ型の要素を格納できる汎用性の高いオブジェクトです。
また、1つの変数で複数のオブジェクトを取り扱うことができるデータ型のことを総じて配列とかコレクションと呼ぶことがあります。
ここでは、後者の「1つの変数で複数のオブジェクトを取り扱うことができるデータ型」の種類と特徴について解説します。それでは、どんな配列が用意されているか見ていきましょう!
配列とは?
配列とは、1つの変数で複数のオブジェクトを管理できるデータ型のことを言います。例えば、以下のような複数のデータを配列で書き直してみましょう。
item1 = 'やくそう' item2 = 'どくけしそう' item3 = 'キメラのつばさ'
配列の1つであるリスト(list)を使うことで以下のように複数のデータを1つの変数にまとめることができました。
items = ['やくそう', 'どくけしそう', 'キメラのつばさ']
このように、同じ用途で使用するようなデータは、配列を使って1つにまとめておいた方が管理がしやすくなります。また、for文を使うことでまとめて処理することもできます。
items = ['やくそう', 'どくけしそう', 'キメラのつばさ'] for item in items: print(item)
実行結果
やくそう どくけしそう キメラのつばさ
ただし、一口に配列と言ってもどれも様々な特徴を持っています。なのでこの記事では、Python に用意されている配列の種類と簡単な特徴を紹介していきます。
配列らへんの用語
配列まわりで使われる用語には、紛らわしいものが結構あります。なので、ゴチャゴチャにならないように少し整理しておきましょう。
| コレクション、コンテナ | 複数のデータを扱える型のこと。配列やスタック、キューなどが含まれる |
|---|---|
| 要素 | 配列に格納されているデータのこと。 |
| シーケンス | 複数のデータを順序付けて扱う型のこと。 |
| インデックス(添字) | シーケンスの要素1つずつに割り振られた番号。 |
| イテラブルオブジェクト | 反復可能なオブジェクト。for文で要素を1つずつ取り出せる。 |
| イテレータ | イテラブルオブジェクトから生成されたオブジェクト。要素を1つずつ取り出せる。 |
| シーケンスの使い方と特徴 |
| イテラブルとイテレータについて |
配列の種類
Pythonが用意している基本的な配列は以下の通りです。
| 型名 | コンストラクタ | 初期化 | 特徴 |
|---|---|---|---|
| リスト | list() | l = [1, 2, 3] | 汎用性抜群 |
| タプル | tuple() | t = (1, 2, 3) | 要素を追加・変更できない |
| セット | set() | s = {1, 2, 3} | 集合 |
それでは、1つずつ配列の特徴と簡単な使い方を見ていきましょう!
list: リスト
リストは複数の要素を順序付けして格納できるコンテナ型のデータ構造であり、異なるデータ型の要素を一緒に格納できる汎用性の高いオブジェクトです。
要素の追加・変更・削除が可能で色々な場面で使われます。
- 可変(ミュータブル)
- 異なるデータ型の要素を一緒に格納できる
- 汎用性が高い
- シーケンスである
簡単なコード
# リスト生成 l = [] # 要素の追加 l.append('hoge') l.append('moge') l.append('hage') # 要素の削除 l.remove('hage') # 要素を1つずつ出力 for element in l: print(element)
実行結果
hoge moge
tuple: タプル
タプルは、リストと同じように複数の要素を格納できるコンテナ型のデータ構造ですが、要素を追加・削除・変更することができないオブジェクトとなっています。
関数の戻り値として複数の要素を一時的に1つにまとめたい場合などでよく使われます。
- 不変(イミュータブル)
- 異なるデータ型の要素を一緒に格納できる
- リストよりもメモリを節約できる
- 関数の戻り値としてよく使う
- シーケンス型である
簡単なコード
def func(): # タプルを用いることで複数の要素を返せる return 1, 2, 3 # アンパックして受け取る v1, v2, v3 = func() # 出力 print(v1) print(v2) print(v3)
実行結果
1 2 3
set: セット
セットは、要素の集合を表現するためのコンテナ型のデータ構造です。重複する要素を持たず、順序を持たないオブジェクトとなっています。要素の追加・変更・削除が可能です。
主に集合演算に使われたり、重複する要素を取り除くために使われます。
- 可変(ミュータブル)
- 重複する要素を持てない
- 順序を保持しない
- 要素の検索が高速
- 集合演算ができる
簡単なコード
vals1 = {1, 2, 3} vals2 = {2, 3, 4} # 和集合 print(vals1 | vals2) # {1, 2, 3, 4} # 積集合 print(vals1 & vals2) # {2, 3} # 差集合 print(vals1 - vals2) # {1} # 対象差集合 print(vals1 ^ vals2) # {1, 4}
その他
上記で紹介した配列の他にもPythonには1つの変数で複数のオブジェクトを扱えるデータ型がたくさん用意されています。その一部を紹介します。
dict: 辞書
辞書は、keyにvalueを対応付けて管理する少し特殊なオブジェクトです。
keyにvalueを対応付けるためインデックスからではなく、keyから要素にアクセスできます。このようなオブジェクトを「マップ」や「連想配列」と呼んだりします。
- keyとvalueで1つの要素
- マッピング型である
並びを保持しないPython 3.7から並びを保持するようになった- 連想配列や連想記憶、マップなどと呼ばれたりする
簡単なコード
# 辞書の生成 d = {} # 要素の追加(dict[key] = value) d['key1'] = 'value1' d['key2'] = 'value2' d['key3'] = 'value3' # 要素の削除 del d['key3'] # 出力 print(d['key1']) print(d['key2'])
実行結果
value1 value2
deque: デック
デックは、collectionsモジュールに含まれるオブジェクトの1つで、複数の要素を扱えるコンテナ型ですが、リストよりも両端の要素を高速で追加、削除が行える特徴を持っています。
先頭、または末尾の要素を扱いたい場合に使われます。
- スタックとキューを一般化したもの
- スレッドセーフ
- メモリ効率が良い
簡単なコード
from collections import deque # 初期化 d = deque([1, 2, 3]) print(d) # 右側に要素を追加 d.append(0) # 左側に要素を追加 d.appendleft(0) print(d) # 右側の要素を取り出す r_item = d.pop() # 左側の要素を取り出す l_item = d.popleft() print(d) # 要素の削除 d.remove(1) print(d)
実行結果
deque([1, 2, 3]) deque([0, 1, 2, 3, 0]) deque([1, 2, 3]) deque([2, 3])
array: アレイ
アレイは、arrayモジュールに含まれるオブジェクトの1つで、複数の要素を扱えるコンテナ型ですが、指定した型の要素しか扱えない特徴があります。
機能を制限することでC言語の配列に似たメモリ効率の良い配列として扱うことができます。
- 指定した型の要素しか扱えない
- メモリ効率が良い
- 使い方はほぼリストと同じ
簡単なコード
from array import array # アレイ初期化 a = array('b', [1, 2, 3]) print(a) # 要素の追加 a.append(1) print(a) # 要素の削除 a.remove(2) print(a) # 要素を1つずつ出力 for element in a: print(element)
実行結果
array('b', [1, 2, 3]) array('b', [1, 2, 3, 1]) array('b', [1, 3, 1]) 1 3 1
まとめ
この記事では、Pythonの配列の種類と簡単な使い方を解説しました。
配列を使うことで複数のデータをまとめて管理できるようになりました。配列はよく使うオブジェクトなのでしっかり覚えておいてください!
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ


