• Xでシェア
  • LINEでシェア
  • このエントリーをはてなブックマークに追加

Python 配列(array)の使い方

この記事のポイント

  • Pythonのarrayモジュールは同じデータ型を効率的に格納
  • リストとは異なる特性と使用場面
  • 科学計算やデータ処理での活用法
  • メモリ効率に優れた構造
  • NumPyとの連携で高度なデータ処理が可能

目次

Pythonの配列(array)とは?

Pythonの標準ライブラリであるarrayモジュールが提供する配列オブジェクトは、同じデータ型の要素だけを集めて効率的に格納するためのデータ構造です。

リストと異なり、配列は「同一のデータ型のみ」という制約があるため、リストよりもメモリを効率的に使用でき、大量データの処理に適しています。そのため、数値計算が中心となる科学計算やデータ分析といった分野で特に重宝され、NumPyなどのより高機能な専門ライブラリと組み合わせることで、さらに高度なデータ処理が可能になります。

配列を作成する際は、格納する要素のデータ型を型コードという一文字の記号('i'は整数、'f'は浮動小数点数など)を指定します。この型コードを指定することで、メモリ上でデータをより密に配置できるため、メモリ効率とパフォーマンスが向上します。単一のデータ構造に限定されるという制約はありますが、この同一性のおかげで大規模なデータを効率的に、高速で処理できるという利点をもたらします。

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

基本構文

Pythonの配列を利用するには、まず標準ライブラリのarrayモジュールをインポートする必要があります。

配列の基本的な構文はシンプルで、array.array(型コード, [初期値])のように、格納する要素の型コードと初期値を指定して配列を作成します。Pythonのリストと同様に、インデックスを使って要素へアクセスしたり変更したり出来るのに加え、append()メソッドやextend()メソッドで要素を追加することができます。配列に格納するデータ型を型コードで指定することで、配列にどんな種類のデータが入れられるかが厳密に決まり、また適切な型コードを選択することでメモリ効率とパフォーマンスが最適化されます。

このように、arrayモジュールによる配列操作は、数値データの大量処理を行う際の強い味方となります。

import array numbers = array.array('i', [1, 2, 3, 4, 5]) numbers.append(6) print(numbers[2]) print(numbers)

出力結果:

3
array('i', [1, 2, 3, 4, 5, 6])

実用例

Pythonの配列(array)は、単なる理論の概念だけでなく、実際のプログラミングの現場でも非常に役立つデータ構造です。ここでは、様々なarray配列の使用例を通じて、その基本操作から応用テクニックまでをマスターしていきましょう。

配列はメモリ効率が良く、特に大量の同一データを扱う際に真価を発揮します。そのため、数値データの処理、バイナリデータの操作、科学計算といった場面で最適です。以下の例では、配列の作成から要素の追加・削除といった基本操作、リストなど他データ形式への変換、さらにはNumpyなどの外部ライブラリとの連携まで、様々な使用方法を紹介します。

基本的な配列操作

配列の基本操作として要素の追加、更新、そして削除があげられます。同じデータ型のみを扱う制約があるからこそ、メモリを効率的に利用できるのが特徴です。具体的には、配列の末尾に要素を追加するappend()メソッド、特定のインデックス(添字)を指定して要素を更新する方法、そして特定の要素を削除するremove()メソッドが主要な操作になります。これらの操作はデータ収集や前処理の基礎となり、大量のデータを効率的に扱う上で特に重要です。

import array animals = array.array('i', [10, 20, 30, 40]) animals.append(50) animals[1] = 25 print(animals)

出力結果:

array('i', [10, 25, 30, 40, 50])

配列の検索と集計

配列に格納されたデータの特性を把握し分析するには、特定の要素の検索や集計機能が欠かせません。Pythonの標準関数であるmin()、max()、sum()を使って最小値、最大値、合計値を簡単に算出できます。sum()で合計値を算出し、配列の要素数(len()で取得)で割ることで、平均値の計算も一行で実装可能です。これらの機能を活用することで、動物データのような多様な数値データに対する統計分析も簡単に行えます。

import array weights = array.array('f', [5.2, 4.3, 2.1, 9.8, 120.5]) print(f"最大: {max(weights):.1f}kg, 最小: {min(weights):.1f}kg") # :.1f追加 print(f"合計: {sum(weights):.1f}kg, 平均: {sum(weights) / len(weights):.1f}kg")

出力結果:

最大: 120.5kg, 最小: 2.1kg
合計: 141.9kg, 平均: 28.4kg

配列のソートと変換

配列に格納されたデータを整理するには、ソート(並び替え)やデータ形式の変換機能が役立ちます。sorted()関数で配列の要素を昇順・降順に簡単に並び替えることが可能で、また配列とリスト間の相互変換も簡単にできます。これらの機能を使うことで、データを特定の順序で効率的に処理したり、他のデータ構造とスムーズに連携したりすることが可能になるため、以下のような動物の年齢データなどを扱う際に便利です。

import array ages = array.array('i', [8, 5, 3, 12, 7]) sorted_ages = array.array('i', sorted(ages)) print(f"元データ: {ages}") print(f"ソート済み: {sorted_ages}, リスト変換: {list(ages)}")

出力結果:

元データ: array('i', [8, 5, 3, 12, 7])
ソート済み: array('i', [3, 5, 7, 8, 12]), リスト変換: [8, 5, 3, 12, 7]

ファイルからの配列読み込み

配列データをプログラムが終了した後も永続的に保存したり、他のプログラムと共有したりするには、ファイルへの入出力(I/O)機能が便利です。arrayオブジェクトでは、tofile()で配列をバイナリ形式でファイルに保存し、fromfile()でバイナリファイルから配列を読み込むことができます。特に、測定データなどの大量のデータを保存するのに適しています。

import array temps = array.array('d', [38.5, 39.2, 38.7, 37.8, 36.6]) with open('temps.bin', 'wb') as f: temps.tofile(f) new_temps = array.array('d') with open('temps.bin', 'rb') as f: new_temps.fromfile(f, len(temps)) print(new_temps)

出力結果:

array('d', [38.5, 39.2, 38.7, 37.8, 36.6])

配列のスライシング

配列の中から特定の部分だけを取り出すスライシングは、データ分析において非常に強力なツールです。Pythonのリストと同様に、インデックス範囲やステップ(間隔)を指定することで、必要な要素だけを効率的に抽出することができます。これにより、大きなデータセットから特定の部分だけを素早く取り出し、集中して分析できるようになります。例えば以下のように、動物種ごとのデータ比較する際などに役立ちます。

import array speeds = array.array('f', [48.0, 13.0, 56.0, 70.0, 32.0]) print(f"最初の3種: {speeds[0:3]}") print(f"1つおき: {speeds[::2]}, 最後の2種: {speeds[-2:]}")

出力結果:

最初の3種: array('f', [48.0, 13.0, 56.0])
1つおき: array('f', [48.0, 56.0, 32.0]), 最後の2種: array('f', [70.0, 32.0])

多次元配列の操作

複雑で構造化されたデータ構造を扱う場合には多次元配列が便利です。Pythonの標準ライブラリが提供するarrayオブジェクトは1次元配列に限定されますが、NumPyを利用すれば多次元配列を効率的に扱うことができます。これにより、動物園の各エリアの動物の種類や数といった複数の特性を同時に考慮した、より複雑なデータ分析が可能になります。これは、異なる特性を同時に分析するときに特に役立ちます。

import array import numpy as np mammals = array.array('i', [12, 8, 15]) birds = array.array('i', [25, 13, 7]) zoo_data = np.array([list(mammals), list(birds)]) print(f"動物園データ:\n{zoo_data}")

出力結果:

動物園データ:
[[12  8 15]
 [25 13  7]]

配列とリストの変換

配列とリストの相互変換は、データの柔軟な操作をする上で重要なテクニックです。配列は同じ種類のデータを効率的に格納するためメモリ効率に優れている一方、リストは異なる方のデータを自由に格納できるため多様な操作が可能です。list()関数で配列をリストに、array()コンストラクタでリストを配列に変換できます。それぞれのデータ構造の特性を理解し、状況に応じて適切なデータ構造を選択することで、処理効率と柔軟性を両立させることができます。

import array animal_codes = [65, 66, 67, 68, 69] ascii_array = array.array('i', animal_codes) back_to_list = list(ascii_array) print(f"配列: {ascii_array}, リスト: {back_to_list}")

出力結果:

配列: array('i', [65, 66, 67, 68, 69]), リスト: [65, 66, 67, 68, 69]

NumPyとの連携

Pythonの標準ライブラリであるarrayオブジェクト(配列)の機能を拡張し、高度な数値計算を行うには、NumPyとの連携が効果的です。NumPy配列は高度な多次元配列(ndarray)による効率的なデータ構造と、それに適用できる数学関数により、データ分析や科学計算における複雑な処理を実現します。標準配列とNumPy配列は相互変換が可能なので、状況に応じてどちらが最適かを選んで利用します。

import array import numpy as np std_array = array.array('d', [1.1, 2.2, 3.3, 4.4, 5.5]) np_array = np.array(std_array) print(f"平均: {np.mean(np_array)}, 標準偏差: {np.std(np_array):.2f}")

出力結果:

平均: 3.3, 標準偏差: 1.56

まとめ

Pythonの配列(array)は、同一のデータ型の要素を効率よく格納できるため、リストよりもメモリを無駄なく使え、大量の数値データを扱う科学計算やデータ分析に最適なツールです。この記事では、型コードを指定した配列の作り方や配列の基本的な操作、さらにはファイル入出力、多次元データの扱い、NumPyとの連携といった実践的な使い方まで幅広く解説しました。配列の特性を理解し、適切に活用することで、効率的なデータ処理とスムーズなPythonプログラミングが実現できるでしょう。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python 配列(array)の使い方