Python

【Python】リストより効率が良いリストみたいな配列【array】

この記事では、リストより効率が良いリストみたいな配列の使い方を解説します。決まった型しか取り扱わない場合に、汎用性の高いリストを使ってしまうと無駄にメモリを消費してしまいます。なのでそんな時は、arrayモジュールの array()クラスを使いましょう!

arrayとは

arrayモジュールのarray()クラスは、文字、整数、浮動小数点数の値を格納できるシーケンス型です。

arrayモジュールは、標準ライブラリ

格納する要素の型を制限することで、リストよりもコンパクトに扱うことができます。型の制限があることを除けば、リストとまったく同じように使えます。

要するに、文字、整数、浮動小数点数の値の中で1種類の型しか扱わない場合に、リストを使うよりもコンパクトに扱えて便利な型ってことです☺️

arrayの使い方

arrayは、以下のように記述します。

import array

array.array(typecode[, initializer])
typecode引数 型コードを指定し、このオブジェクトで取り扱う型を設定します。(後述)
initializer引数 初期値を指定できるオプション引数。リストやイテレーション可能なオブジェクトを指定する。

型コード一覧

型コードには、以下が定義されています。

型コード Cの型 Pythonの型 最小サイズ(バイト)
‘b’ signed char int 1
‘B’ unsigned char int 1
‘u’ wchar_t Unicode文字 2
‘h’ signed short int 2
‘H’ unsigned short int 2
‘i’ signed int int 2
‘I’ (大文字のi) unsigned int int 2
‘l’ (小文字のL) signed long int 4
‘L’ unsigned long int 4
‘q’ signed long long int 8
‘Q’ unsigned long long int 8
‘f’ float float 4
‘d’ double float 8

サンプル

試しに、arrayを使ってリストと同じようなことをしてみます。

import array

# 型コード 'H' で生成
values = array.array('H', [1, 2])

# 要素追加
values.append(101)

# 要素削除
values.remove(2)

# for文で出力
for value in values:
    print(value)

実行結果

1
101

型の範囲に注意

指定した型コードの範囲外の値を格納するとOverflowErrorが発生します。

import array

values = array.array('b')

# 範囲外の要素追加
values.append(128)

実行結果

Traceback (most recent call last):
  File "main.py", line 7, in 
    values.append(128)
OverflowError: signed char is greater than maximum

データ型の範囲ついては、以下の記事が参考になります。

Linkデータ型の範囲 | Microsoft Docs

メモリ消費を比べてみる

本当にリストよりもメモリを節約して扱えてるか、生成したオブジェクトのサイズを確認して比べてみましょう❗️

import array

# 型モード 'i'
a = array.array('i', [1, 2, 3])
# メモリ消費量の出力
print(f"型モード 'i': {a.__sizeof__()}")

# 型モード 'b'
a = array.array('b', [1, 2, 3])
# メモリ消費量の出力
print(f"型モード 'b': {a.__sizeof__()}")

# リスト
l = [1, 2, 3]
# メモリ消費量の出力
print(f"リスト: {l.__sizeof__()}")

実行結果

型モード 'i': 76
型モード 'b': 67
リスト: 104

かなりメモリが節約できていることがわかりました。指定した型モードによっても差が生じるので、適切なサイズの型モードを指定しましょう☺️

【Python】オブジェクトのサイズ(メモリ消費量)を確認する この記事では、Pythonでオブジェクトのサイズ(メモリ消費量)を確認する方法を解説します。オブジェクトのサイズを確認することで、ど...

まとめ

この記事では、リストより効率の良いarrayについて解説しました。

1種類の型の要素しか格納しない場合は、リストよりもarrayを使う方が効率的です。ただし、型のサイズには気をつけましょう❗️

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

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』