\

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を使うと高速で良いです。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です