1 次元配列を作成する場合は、リストとして実装するか、標準ライブラリの「配列」モジュールを使用します。私は 1 次元配列には常にリストを使用しています。
代わりにアレイ モジュールを使用する理由または状況は何ですか?
これはパフォーマンスとメモリの最適化のためでしょうか、それとも何か明らかなことを見逃しているのでしょうか?
ベストアンサー1
基本的に、Pythonのリストは非常に柔軟で、完全に異種で任意のデータを保持でき、非常に効率的に追加できます。償却定数時間リストを時間効率よく手間をかけずに縮小および拡大する必要がある場合は、これらが最適です。ただし、これらはC 配列よりもはるかに多くのスペースfloat
を使用します。これは、単純な C 型 (またはなど)で表現できるデータであっても、リスト内の各項目ごとに個別の Python オブジェクトの構築が必要になるためですuint64_t
。
一方、型array.array
は C 配列の薄いラッパーにすぎません。 型は同種のデータ (つまり、すべて同じ型) のみを保持できるため、sizeof(one object) * length
メモリをバイト数だけ使用します。 ほとんどの場合、 C 配列を拡張機能またはシステム コール (たとえば、ioctl
またはfctnl
) に公開する必要がある場合に使用します。
array.array
はPython 2.xで可変文字列を表現するのにも適した方法です( array('B', bytes)
)。しかし、Python 2.6以降と3.xでは可変バイト文字列を次のように表現します。bytearray
。
ただし、数値データの同種配列に対して計算を実行する場合は、複雑な多次元配列に対する操作を自動的にベクトル化できる NumPy を使用する方がはるかに適切です。
簡単に言うと、数学計算以外のarray.array
理由で同種の C 配列のデータが必要な場合に役立ちます。