array —数値の効率的な配列
このモジュールは、文字、整数、浮動小数点数などの基本値の配列をコンパクトに表すことができるオブジェクトタイプを定義します。 配列はシーケンスタイプであり、リストに格納されているオブジェクトのタイプが制限されていることを除けば、リストと非常によく似た動作をします。 タイプは、オブジェクト作成時にタイプコードを使用して指定されます。これは1文字です。 次のタイプコードが定義されています。
タイプコード | Cタイプ | Pythonタイプ | バイト単位の最小サイズ | ノート |
---|---|---|---|---|
'b'
|
署名された文字 | int | 1 | |
'B'
|
unsigned char | int | 1 | |
'u'
|
wchar_t | Unicode文字 | 2 | (1) |
'h'
|
短い署名 | int | 2 | |
'H'
|
署名されていない短い | int | 2 | |
'i'
|
署名されたint | int | 2 | |
'I'
|
unsigned int | int | 2 | |
'l'
|
長く署名した | int | 4 | |
'L'
|
unsigned long | int | 4 | |
'q'
|
長い間署名 | int | 8 | |
'Q'
|
unsigned long long | int | 8 | |
'f'
|
浮く | 浮く | 4 | |
'd'
|
ダブル | 浮く | 8 |
ノート:
プラットフォームに応じて、16ビットまたは32ビットにすることができます。
バージョン3.9で変更:
array('u')
は、非推奨のPy_UNICODE
ではなく、wchar_t
をCタイプとして使用するようになりました。Py_UNICODE
はPython3.3以降のwchar_t
のエイリアスであるため、この変更はその動作に影響しません。
値の実際の表現は、マシンアーキテクチャによって決定されます(厳密に言えば、C実装によって)。 実際のサイズには、itemsize
属性からアクセスできます。
モジュールは次のタイプを定義します。
- class array.array(typecode[, initializer])
アイテムが typecode によって制限され、オプションの initializer 値から初期化される新しい配列。これは、リスト、バイトのようなオブジェクト、または反復可能である必要があります。適切なタイプの要素の上。
リストまたは文字列が指定された場合、イニシャルは新しい配列の fromlist()、 frombytes()、または fromunicode()メソッドに渡されます(以下を参照)。配列に初期アイテムを追加します。 それ以外の場合、反復可能な初期化子は extends()メソッドに渡されます。
- array.typecodes
- 使用可能なすべてのタイプコードを含む文字列。
配列オブジェクトは、インデックス作成、スライス、連結、および乗算の通常のシーケンス操作をサポートします。 スライス割り当てを使用する場合、割り当てられる値は同じタイプコードの配列オブジェクトである必要があります。 それ以外の場合はすべて、 TypeError が発生します。 配列オブジェクトもバッファインターフェイスを実装し、バイトのようなオブジェクトがサポートされている場所であればどこでも使用できます。
次のデータ項目とメソッドもサポートされています。
- array.typecode
- 配列の作成に使用されるタイプコード文字。
- array.itemsize
- 内部表現の1つの配列項目のバイト単位の長さ。
- array.append(x)
- 値 x の新しいアイテムを配列の最後に追加します。
- array.buffer_info()
現在のメモリアドレスと、配列の内容を保持するために使用されるバッファの要素の長さを示すタプル
(address, length)
を返します。 バイト単位のメモリバッファのサイズは、array.buffer_info()[1] * array.itemsize
として計算できます。 これは、特定のioctl()
操作など、メモリアドレスを必要とする低レベルの(そして本質的に安全でない)I / Oインターフェイスを操作するときに役立つ場合があります。 返される数値は、配列が存在し、長さ変更操作が適用されていない限り有効です。ノート
CまたはC ++で記述されたコードの配列オブジェクトを使用する場合(この情報を効果的に利用する唯一の方法)、配列オブジェクトでサポートされているバッファーインターフェイスを使用する方が理にかなっています。 このメソッドは下位互換性のために維持されており、新しいコードでは避ける必要があります。 バッファインターフェイスは、バッファプロトコルに記載されています。
- array.byteswap()
- 配列のすべての項目を「バイトスワップ」します。 これは、サイズが1、2、4、または8バイトの値でのみサポートされます。 他のタイプの値の場合、 RuntimeError が発生します。 バイトオーダーが異なるマシンで書き込まれたファイルからデータを読み取る場合に便利です。
- array.count(x)
- 配列内の x の出現回数を返します。
- array.extend(iterable)
- iterable から配列の最後にアイテムを追加します。 iterable が別の配列である場合、正確に同じタイプコードである必要があります。 そうでない場合、 TypeError が発生します。 iterable が配列でない場合、それは反復可能である必要があり、その要素は配列に追加される正しい型である必要があります。
- array.frombytes(s)
文字列からアイテムを追加し、文字列をマシン値の配列として解釈します( fromfile()メソッドを使用してファイルから読み取られたかのように)。
バージョン3.2の新機能:
fromstring()
は、わかりやすくするために frombytes()に名前が変更されました。
- array.fromfile(f, n)
- ファイルオブジェクト f から n アイテムを(マシン値として)読み取り、配列の最後に追加します。 使用可能なアイテムが n 未満の場合、 EOFError が発生しますが、使用可能なアイテムは引き続き配列に挿入されます。
- array.fromlist(list)
- リストからアイテムを追加します。 これは、タイプエラーが発生した場合に配列が変更されないことを除いて、
for x in list: a.append(x)
と同等です。
- array.fromunicode(s)
- 指定されたUnicode文字列からのデータでこの配列を拡張します。 配列はタイプ
'u'
配列である必要があります。 それ以外の場合は、 ValueError が発生します。array.frombytes(unicodestring.encode(enc))
を使用して、Unicodeデータを他のタイプの配列に追加します。
- array.index(x)
- i が配列内で最初に出現する x のインデックスになるように、最小の i を返します。
- array.insert(i, x)
- 位置 i の前の配列に、値 x の新しいアイテムを挿入します。 負の値は、配列の終わりを基準にしたものとして扱われます。
- array.pop([i])
- インデックス i のアイテムを配列から削除し、それを返します。 オプションの引数のデフォルトは
-1
であるため、デフォルトでは最後の項目が削除されて返されます。
- array.remove(x)
- x の最初の出現を配列から削除します。
- array.reverse()
- 配列内の項目の順序を逆にします。
- array.tobytes()
配列をマシン値の配列に変換し、バイト表現を返します( tofile()メソッドによってファイルに書き込まれるのと同じバイトシーケンス)。
バージョン3.2の新機能:
tostring()
は、わかりやすくするために tobytes()に名前が変更されました。
- array.tofile(f)
- すべてのアイテムを(マシン値として)ファイルオブジェクト f に書き込みます。
- array.tolist()
- 配列を同じ項目の通常のリストに変換します。
- array.tounicode()
- 配列をUnicode文字列に変換します。 配列はタイプ
'u'
配列である必要があります。 それ以外の場合は、 ValueError が発生します。array.tobytes().decode(enc)
を使用して、他のタイプの配列からUnicode文字列を取得します。
配列オブジェクトが印刷または文字列に変換されると、array(typecode, initializer)
として表されます。 initializer は、配列が空の場合は省略されます。それ以外の場合は、 typecode が'u'
の場合は文字列、それ以外の場合は数値のリストです。 array クラスがfrom array import array
。 例:
array('l')
array('u', 'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])