Pythonで配列を扱う際、「指定したサイズで配列を作成したい」「配列の長さを事前に決めて初期化したい」と思うことはありませんか?
プログラミングでは、データの格納領域を事前に確保したり、特定のサイズの配列を用意したりする場面が頻繁にあります。特に、数値計算やデータ処理において、配列のサイズを明確に指定することは効率的なプログラミングにつながります。
この記事では、Pythonで配列を長さ指定で宣言・初期化する方法を7つの具体的な手法とともに解説します。リスト(list)からNumPy配列まで、実際のコード例を交えながら実用的な方法をご紹介します。
目次
Pythonで配列を長さ指定で宣言する基本方法
Pythonで配列を長さ指定で作成する方法は主に2つのアプローチがあります。
1. リスト(list)を使用する方法
Pythonの標準的なリスト型を使用して、指定した長さの配列を作成します。
2. NumPy配列を使用する方法
NumPyライブラリを使用して、より高性能な配列を作成します。
それぞれの方法には特徴があり、用途に応じて使い分けることが重要です。
リスト(list)で長さを指定した配列作成
方法1: *演算子を使用した初期化
最も基本的な方法は、*演算子を使用してリストを作成することです。
# 長さ5のリストを0で初期化 arr = [0] * 5 print(arr) # [0, 0, 0, 0, 0] print(len(arr)) # 5 # 長さ3のリストを特定の値で初期化 arr_string = ["初期値"] * 3 print(arr_string) # ['初期値', '初期値', '初期値']
方法2: リスト内包表記を使用した初期化
リスト内包表記を使用すると、より柔軟な初期化が可能です。
# 長さ5のリストを0で初期化 arr = [0 for i in range(5)] print(arr) # [0, 0, 0, 0, 0] # 長さ5のリストをインデックスで初期化 arr_index = [i for i in range(5)] print(arr_index) # [0, 1, 2, 3, 4] # 長さ3のリストを特定の計算結果で初期化 arr_calc = [i * 2 for i in range(3)] print(arr_calc) # [0, 2, 4]
方法3: 空リストからの動的作成
空のリストから開始して、appendメソッドで要素を追加する方法です。
# 空リストを作成 arr = [] print(len(arr)) # 0 # 長さ5になるまで要素を追加 for i in range(5): arr.append(i) print(arr) # [0, 1, 2, 3, 4] print(len(arr)) # 5
2次元配列の作成時の注意点
2次元配列を作成する際は、以下の点に注意が必要です。
# 間違った方法(同じオブジェクトを参照してしまう) arr_ng = [[0] * 3] * 2 arr_ng[0][0] = 1 print(arr_ng) # [[1, 0, 0], [1, 0, 0]] - 両方とも変更される # 正しい方法(リスト内包表記を使用) arr_ok = [[0] * 3 for i in range(2)] arr_ok[0][0] = 1 print(arr_ok) # [[1, 0, 0], [0, 0, 0]] - 個別に変更される
NumPy配列で長さを指定した配列作成
NumPyを使用すると、より効率的で高性能な配列を作成できます。
方法4: numpy.zeros()を使用した初期化
import numpy as np # 長さ5の配列を0で初期化 arr = np.zeros(5) print(arr) # [0. 0. 0. 0. 0.] print(len(arr)) # 5 # データ型を指定して初期化 arr_int = np.zeros(5, dtype=int) print(arr_int) # [0 0 0 0 0] # 2次元配列の作成 arr_2d = np.zeros((3, 4)) print(arr_2d) # [[0. 0. 0. 0.] # [0. 0. 0. 0.] # [0. 0. 0. 0.]]
方法5: numpy.ones()を使用した初期化
import numpy as np # 長さ5の配列を1で初期化 arr = np.ones(5) print(arr) # [1. 1. 1. 1. 1.] # データ型を指定して初期化 arr_int = np.ones(5, dtype=int) print(arr_int) # [1 1 1 1 1] # 2次元配列の作成 arr_2d = np.ones((2, 3)) print(arr_2d) # [[1. 1. 1.] # [1. 1. 1.]]
方法6: numpy.full()を使用した任意の値での初期化
import numpy as np # 長さ5の配列を100で初期化 arr = np.full(5, 100) print(arr) # [100 100 100 100 100] # 2次元配列を任意の値で初期化 arr_2d = np.full((2, 3), 0.5) print(arr_2d) # [[0.5 0.5 0.5] # [0.5 0.5 0.5]] # 文字列で初期化 arr_str = np.full(3, "Hello", dtype=object) print(arr_str) # ['Hello' 'Hello' 'Hello']
方法7: numpy.arange()を使用した連続値での初期化
import numpy as np # 0から4までの連続値で初期化 arr = np.arange(5) print(arr) # [0 1 2 3 4] # 1から10までの連続値で初期化 arr_range = np.arange(1, 11) print(arr_range) # [ 1 2 3 4 5 6 7 8 9 10] # ステップ値を指定 arr_step = np.arange(0, 10, 2) print(arr_step) # [0 2 4 6 8]
配列の長さを取得する方法
配列の長さを取得するには、組み込み関数len()を使用します。
# リストの長さ取得 list_arr = [1, 2, 3, 4, 5] print(len(list_arr)) # 5 # NumPy配列の長さ取得 import numpy as np np_arr = np.array([1, 2, 3, 4, 5]) print(len(np_arr)) # 5 # 2次元配列の場合(行数を取得) arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) print(len(arr_2d)) # 2 print(arr_2d.shape) # (2, 3) - 形状を確認
実用的なコード例とベストプラクティス
データ処理での活用例
import numpy as np # 学生の成績を格納する配列を作成 student_count = 30 scores = np.zeros(student_count) # 初期値を設定 for i in range(student_count): scores[i] = 50 # 基準点として50点を設定 print(f"学生数: {len(scores)}") print(f"平均点: {np.mean(scores)}")
効率的な配列操作
import numpy as np # 大量のデータを扱う場合はNumPyが効率的 data_size = 1000000 # リストでの作成(低速) list_data = [0] * data_size # NumPyでの作成(高速) np_data = np.zeros(data_size) print(f"リストサイズ: {len(list_data)}") print(f"NumPy配列サイズ: {len(np_data)}")
使い分けの指針
# 少量のデータ、柔軟性が必要な場合:リスト shopping_list = ["商品A"] * 3 shopping_list.append("商品B") # 動的に追加可能 # 大量のデータ、数値計算が必要な場合:NumPy import numpy as np calculation_data = np.zeros(10000) result = np.sum(calculation_data) # 高速な計算
よくあるエラーと対処法
エラー1: 2次元配列の参照エラー
# 間違った例 arr_ng = [[0] * 3] * 2 arr_ng[0][0] = 1 print(arr_ng) # [[1, 0, 0], [1, 0, 0]] - 意図しない結果 # 正しい例 arr_ok = [[0] * 3 for i in range(2)] arr_ok[0][0] = 1 print(arr_ok) # [[1, 0, 0], [0, 0, 0]] - 期待する結果
エラー2: データ型の不整合
import numpy as np # 整数型の配列に小数を代入 arr = np.zeros(5, dtype=int) arr[0] = 3.14 print(arr) # [3 0 0 0 0] - 小数点以下が切り捨てられる # 解決方法:適切なデータ型を指定 arr_float = np.zeros(5, dtype=float) arr_float[0] = 3.14 print(arr_float) # [3.14 0. 0. 0. 0. ]
エラー3: インデックスエラー
# 配列の範囲外アクセス arr = [0] * 5 try: print(arr[5]) # IndexError except IndexError as e: print(f"エラー: {e}") # 解決方法:範囲を確認 if 5 < len(arr): print(arr[5]) else: print("インデックスが範囲外です")
まとめ
Pythonで配列を長さ指定で宣言する方法は以下の7つです:
- リスト + *演算子:
[0] * 5
- 最も簡単な方法 - リスト内包表記:
[0 for i in range(5)]
- 柔軟な初期化 - 動的追加:
append()
メソッドを使用 - numpy.zeros():
np.zeros(5)
- 0で初期化 - numpy.ones():
np.ones(5)
- 1で初期化 - numpy.full():
np.full(5, 100)
- 任意の値で初期化 - numpy.arange():
np.arange(5)
- 連続値で初期化
選択の指針:
- 少量データ、柔軟性重視: リスト型を使用
- 大量データ、数値計算: NumPy配列を使用
- 2次元配列: リスト内包表記またはNumPyを使用
配列の長さはlen()
関数で取得でき、適切な方法を選択することで効率的なPythonプログラムを作成できます。