Pythonのarrayの使い方【型付きのリスト】
- 作成日: 2021-05-20
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonのarrayの使い方
Pythonにはarrayというモジュール(外部ライブラリ)があります。
array
は一言で言うと「型を指定できるリスト」です。
この記事ではarray
の使い方をわかりやすく解説します。
結論から言うとarray
は↓のように使います。
import array
arr = array.array('B') # unsigned char型の配列を生成
arr.append(1)
arr.append(2)
print(arr)
# array('B', [1, 2])
array
について具体的に↓を見ていきます。
- arrayの大まかな使い方
- arrayの型コード(typecode)
- 要素1つのサイズ(itemsize)
- 配列を作成する
- 添え字で要素を参照する
- for文で回す
- 配列の長さを得る
- append()で要素を追加
- extend()で配列を拡張
- fromlist()でリストを取り込む
- insert()で要素を挿入
- pop()で要素を削除
- tolist()でリストに変換
- 型のオーバーフロー
- 型のタイプエラー
arrayの大まかな使い方
array
は簡単に言うと「型の付いたリスト」です。
array
にはtypecode
(型コード)と呼ばれる型を指定することができます。
array
を使うには最初にarray
モジュールをインポートします。
import array
array.array()
で型付きの配列を作成することができます。
配列はその型のサイズの要素を持ちます。
型のサイズからはみ出たサイズの要素を追加しようとするオーバーフローエラーになります。
そのためarray
に要素を追加したり挿入したりしようとする場合は、型の範囲内で行わなければいけません。
型以外はほとんどリストと同じ使い方ができます。
for
文でも回せますし、append()
やpop()
などお馴染みのメソッドもあります。
arrayの型コード(typecode)
array
に指定できる型コード(typecode
)は↓の通りです。
型コード | 型(C言語) | 型(Python) | 型の最小バイト数 |
|
signed char |
int |
1 |
|
unsigned char |
int |
1 |
|
wchar_t |
Unicode文字(unicode型) |
2 |
|
signed short |
int |
2 |
|
unsigned short |
int |
2 |
|
signed int |
int |
2 |
|
unsigned int |
int |
2 |
|
signed long |
int |
4 |
|
unsigned long |
int |
4 |
|
signed long long |
int |
8 |
|
unsigned long long |
int |
8 |
|
浮動小数点数 |
浮動小数点数 |
4 |
|
double |
浮動小数点数 |
8 |
↑の型をarray.array()
の第1引数に指定することができます。
↓のようにです。
import array
arr1 = array.array('B') # unsigned char (符号なし文字)
print(arr1)
# array('B')
arr2 = array.array('i') # signed int (符号付き整数)
print(arr2)
# array('i')
arr3 = array.array('d') # double (倍精度浮動小数点数)
print(arr3)
# array('d')
↑のarr1
はunsigned char
型の配列、arr2
はsigned int
型の配列、arr3
はdouble
型の配列になります。
array
は型コードの型を内部で保持します。
array
は↑のように型を指定してオブジェクトを生成するのが特徴的です。
先ほどの↑の表の一覧ですが、型のサイズは最小サイズであることに注意が必要です。
つまりsigned int
などは環境によっては4
バイトになることがあります。
要素1つのサイズ(itemsize)
array
の要素1つ分のサイズは、array.array
の属性itemsize
で取得できます。
arr1 = array.array('B') # usigned char (1バイト)
print(arr1.itemsize)
# 1
arr2 = array.array('i') # signed int (2バイト ~ 4バイト)
print(arr2.itemsize)
# 4
筆者の環境はWindows10の64ビットCPUですが、その環境だと↑のようにsigned int
は4
バイトになります。
配列を作成する
array
で配列を作成するにはarray.array()
を使います。
array.array()
は↓のような構造になっています。
array.array(型コード, 初期値)
↑の内、初期値は省略することができます。
省略した場合は空の配列が作成されます。
arr = array.array('i')
print(arr)
# array('i')
print(len(arr))
# 0
初期値を指定した場合はその初期値で配列が初期化されます。
arr = array.array('i', [1, 2, 3])
print(arr)
# array('i', [1, 2, 3])
print(len(arr))
# 3
初期値の値は型の範囲内のサイズである必要があります。
型の範囲外のサイズである場合は例外OverflowError
が送出されます。
try:
arr = array.array('B', [-1])
except OverflowError as e:
print(e)
# unsigned byte integer is less than minimum
添え字で要素を参照する
配列はリストと同じように、角カッコと添え字でその添え字の要素を参照することができます。
arr = array.array('i', [1, 2, 3])
print(arr[0])
# 1
print(arr[1])
# 2
print(arr[2])
# 3
for文で回す
配列はfor
文で回すことができます。
arr = array.array('i', [1, 2, 3])
for el in arr:
print(el)
# 1
# 2
# 3
配列の長さを得る
配列はlen()
でその長さを得ることができます。
arr = array.array('i', [1, 2, 3])
print(len(arr))
# 3
append()で要素を追加
array
の末尾に要素を追加したい場合はappend()
を使います。
append()
の第1引数に追加したい要素を指定します。
arr = array.array('i')
arr.append(1)
arr.append(2)
arr.append(3)
print(arr)
# array('i', [1, 2, 3])
extend()で配列を拡張
array
にリストや別のarray
を繋げたい場合はextend()
を使います。
arr = array.array('i')
arr.extend([10, 20])
arr.extend([3, 4, 5])
print(arr)
# array('i', [10, 20, 3, 4, 5])
↑の例ではsigned int
型のarray
にリストを連結しています。
array
をarray
に連結する場合は型を同じにする必要があります。
arr1 = array.array('i', [1, 2])
arr2 = array.array('i', [1, 2, 3])
arr1.extend(arr2)
print(arr1)
# array('i', [1, 2, 1, 2, 3])
fromlist()でリストを取り込む
fromlist()
で配列にリストを連結することができます。
arr = array.array('i')
arr.fromlist([10, 20])
arr.fromlist([3, 4])
print(arr)
# array('i', [10, 20, 3, 4])
insert()で要素を挿入
配列に要素を挿入するにはinsert()
を使います。
insert()
の第1引数に挿入位置、第2引数に値を指定します。
arr = array.array('i')
arr.insert(0, 10)
arr.insert(0, 20)
print(arr)
# array('i', [20, 10])
pop()で要素を削除
配列の末尾の要素をポップ(削除して取得)するにはpop()
を使います。
arr = array.array('i', [1, 2, 3])
el = arr.pop()
print(arr)
# array('i', [1, 2])
print(el)
# 3
pop()
の第1引数に添え字を指定すると、その添え字の要素をポップできます。
arr = array.array('i', [1, 2, 3])
el = arr.pop(0)
print(arr)
# array('i', [2, 3])
print(el)
# 1
tolist()でリストに変換
tolist()
で配列をリストに変換できます。
arr = array.array('i', [1, 2, 3])
lis = arr.tolist()
print(lis)
# [1, 2, 3]
型のオーバーフロー
array
全般に言えることですが、挿入などを行う場合、値のサイズが範囲外だと例外OverflowError
が送出されます。
arr = array.array('B')
try:
arr.insert(0, -1)
except OverflowError as e:
print(e)
# unsigned byte integer is less than minimum
↑の場合、型コードのB
はunsigned char
を表しています。
unsigned char
は符号なしの1
バイトです。つまり負数を表現できません。
insert()
で↑のように負数を挿入しようとすると↑のようなOverflowError
が発生します。
型のタイプエラー
これもarray
全般に言えることですが、型が違う場合は例外TypeError
が送出されます。
たとえばextend()
で型の違う配列同士を連結しようとすると↓のようになります。
arr1 = array.array('i', [1, 2])
arr2 = array.array('d', [1, 2, 3])
try:
arr1.extend(arr2)
except TypeError as e:
print(e)
# can only extend with array of same kind
おわりに
今回はPythonのarray
をまとめてみました。
基本的にはリストと同じノリで使えるモジュールのようです。
🦝 < 型は人生を豊かにする