Pythonのarray.array
は、基本的な値 (文字、整数、浮動小数点数) のアレイ (array、配列) をコンパクトに表現できるオブジェクト型を定義しています。アレイはシーケンス (sequence) 型であり、中に入れるオブジェクトの型に制限があることを除けば、リストとまったく同じように振る舞います。
array.arrayの使い方
import array
arr = array.array('i', []) # 数値型の空の配列を初期化
arr.append(1) # 値を加える
print(arr) # array('i', [1])
型が違う値を加えようとすると、エラーになります。
arr.append('hoge') # TypeError: an integer is required (got type str)
array.arrayの特性
array.array
は、リストと大体同じなんですが、リストよりもメモリ効率が良く、高速アクセスが可能な点に魅力があります。具体的にはpop()
とinsert()
の速度が明らかに違います。
import array
import time
a_list = [i for i in range(1000000)]
s = time.time()
for i in range(10000):
a_list.pop(500000)
a_list.insert(500000, 500000)
print('list:', time.time() - s)
arr = array.array('i', a_list)
s = time.time()
for i in range(10000):
arr.pop(500000)
arr.insert(500000, 500000)
print('array:', time.time() - s)
# list: 5.113029718399048
# array: 2.0941877365112305
array
の方が顕著に速いです。これができると何が嬉しいかというと、bisect_left
モジュールなどと組み合わると、高速に順序付きの配列を保持することができます。
まとめ
一般的な配列管理ではリストでほぼ事足りるかと思います。しかし、値の順序を保持して配列を更新する必要がある際は、array.array
を使うと高速で良いです。