Categories: Python

【Python】1つの変数で複数のオブジェクトを扱えるデータ型の種類と特徴【配列(コレクション)】

この記事では、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

list(リスト)の使い方

tuple: タプル

タプルは、リストと同じように複数の要素を格納できるコンテナ型のデータ構造ですが、要素を追加・削除・変更することができないオブジェクトとなっています。

関数の戻り値として複数の要素を一時的に1つにまとめたい場合などでよく使われます。

タプルの特徴

簡単なコード

def func():
    # タプルを用いることで複数の要素を返せる
    return 1, 2, 3

# アンパックして受け取る
v1, v2, v3 = func()

# 出力
print(v1)
print(v2)
print(v3)

実行結果

1
2
3

tuple(タプル)の使い方

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}

set(セット)の使い方と集合演算を解説

その他

上記で紹介した配列の他にもPythonには1つの変数で複数のオブジェクトを扱えるデータ型がたくさん用意されています。その一部を紹介します。

dict: 辞書

辞書は、keyvalueを対応付けて管理する少し特殊なオブジェクトです。

keyvalueを対応付けるためインデックスからではなく、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

辞書(マップ)の使い方【dict】

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])

スタックやキューのように扱えるdeque(デック)の使い方

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

リストよりメモリ効率が良いリストみたいなarrayの使い方

まとめ

この記事では、Pythonの配列の種類と簡単な使い方を解説しました。

配列を使うことで複数のデータをまとめて管理できるようになりました。配列はよく使うオブジェクトなのでしっかり覚えておいてください!

それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ

Tags: 入門
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

4週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

5か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago