Pythonの配列の基本
プログラミング初心者の方にとって、配列の概念や作成方法は最初につまずきやすいポイントの一つです。
ここでは、Pythonにおける配列の基本的な考え方から、実際の作成方法、そして日常的な用途まで幅広くカバーしていきます。
【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング
配列とリストの概要
Pythonでは、一般的に配列と呼ばれるデータ構造をリスト(list)として実装します。
他の多くのプログラミング言語では配列とリストは別物ですが、Pythonではリストが配列の役割を果たしているのが特徴です。厳密な配列が必要な場合はarrayモジュールもありますが、通常の用途ではリストで十分対応できます。
リストは異なるデータ型の要素を混在させることができ、サイズも動的に変更可能な柔軟性があります。
出力結果
['ネコ', 'イヌ', 'ウサギ']
[1, 2, 3, 4, 5]
['ネコ', 3, 'イヌ', 7]なお、以下の記事でもリストについて詳しく解説しています。
【関連】Pythonのlistを徹底攻略!基本から実践応用まで初心者向けに解説
配列作成の基本構文
Pythonでリスト(配列)を作成する方法はいくつかあります。最も基本的な方法は角括弧([]) を使って要素を直接指定することです。空のリストから始めて後から要素を追加することも、最初から値を設定することも可能です。
出力結果
[]
['ハムスター', 'インコ', 'カメ']
['キツネ']配列の用途と典型的な利用シーン
配列は複数のデータをまとめて管理するのに適しており、特にループ(繰り返し)処理や連続したデータの操作でその真価を発揮します。
例えば、複数の動物の名前を管理したり、数値データの計算処理を行ったりする際に活用できます。また、webアプリケーションでユーザーの入力データを一時的に保存する場合や、ファイルから読み込んだデータを一行ずつ処理する際にも配列は欠かせません。
出力結果
ゾウが動物園にいます
ライオンが動物園にいます
キリンが動物園にいますPythonでの連番配列の作成方法
連続する数値の配列を作成することは、プログラミングにおいて頻繁に必要になる操作です。Pythonでは複数の方法で連番配列を効率的に作成できます。ここでは、range関数をはじめとした標準的な方法から、より高度なNumPyを使った手法まで、段階的に学んでいきましょう。
range関数による連番生成
range関数は、連続する整数を生成するPythonの組み込み関数です。range(start, stop, step)の形式で、開始値、終了値、ステップ数(~ずつ)を指定できます。注意点として、range自体はリストではなくrangeオブジェクトを返すため、リストとして使いたい場合はlistで変換する必要があります。
出力結果
range(0, 5)
[0, 1, 2, 3, 4]
[2, 3, 4, 5, 6, 7]
[0, 2, 4, 6, 8]for文を用いた連番リストの作成
for文とappendメソッドを組み合わせることでより柔軟な連番リストを作成でき、さらにリスト内包表記を使うとより簡潔なコードで記述できます。この方法は、単純な連番だけでなく、計算式を含んだ数列の生成にも適用できます。
出力結果
['動物1', '動物2', '動物3']
['動物1', '動物2', '動物3']逆順・ステップ指定など特殊な連番作成
range関数では、第3引数であるstepに負のステップを指定することで、逆順の連番を作成できます。また、偶数のみ・奇数のみといった特定の条件を満たす数値だけを抽出することも可能です。
出力結果
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[0, 2, 4, 6, 8, 10]
[1, 3, 5, 7, 9]rangeとnumpy.arangeの違い
NumPyのarange関数は、Pythonのrange関数と似ていますが、浮動小数点数を扱える点が大きな違いです。また、NumPyの配列オブジェクトを直接返すため、リスト等で変換を行うrange関数に比べて数値計算に適しています。ただし、整数の連番を作る場合は、メモリ効率の観点からPythonのrange関数の方が適している場合もあります。
出力結果
[0, 1, 2, 3, 4]
[0. 0.5 1. 1.5 2. ]NumPyによる本格的な配列作成
数値計算や科学技術計算において、NumPyはPythonの標準的なリストよりも高速で効率的な配列処理を提供する、欠かせないライブラリです。特に多次元配列の操作や大量のデータ処理において、その真価を発揮します。ここでは、NumPyを使った配列作成の基本から応用までを詳しく解説していきます。
NumPy配列(ndarray)の基本
NumPy配列(ndarray)は、すべて同じデータ型の要素を効率的に格納できる多次元配列です。Pythonのリストと比べてメモリ使用量が少なく、計算速度が高速という特徴があります。また、Numpyが提供するベクトル化された演算により、配列全体に対する計算を一度に実行できます。科学計算やデータ分析では、この効率性と実行速度が特に活かされます。
出力結果
[1 2 3 4 5]
形状: (5,)
データ型: int641次元・2次元・3次元配列の作成方法
NumPyでは、さまざまな次元の配列を簡単に作成できます。1次元配列はベクトル、2次元配列は行列、3次元配列はテンソル(数字を入れるコンテナで、多次元のデータ構造のこと)として扱われます。配列の次元と形状は、作成後にreshapeメソッドで変更することも可能です。
出力結果
[3 5 2 8]
[[ 5.2 30. ]
[12.5 45. ]
[ 2.1 15. ]]
[[[1 2]
[3 4]]
[[5 6]
[7 8]]]ゼロ埋め・ランダム値など便利な配列初期化関数
NumPyには配列を効率的に初期化するための便利な関数群があります。zeros関数でゼロ埋めの配列、ones関数で1埋めの配列、full関数で指定した値で埋めた配列を作成できます。また、randomモジュールを使えばランダムな値で初期化された配列も簡単に作成でき、趣味レーションなどに活用できます。
出力結果(例)
[[0. 0. 0.]
[0. 0. 0.]]
[[1. 1.]
[1. 1.]]
[[7 7]
[7 7]
[7 7]]
[[0.14805475 0.75417427]
[0.83488533 0.18483767]]※出力結果は実行ごとに変わります
多次元配列の操作と応用例
NumPyの多次元配列では、reshapeによる形状変更、スライスによる部分配列の抽出、軸を指定した計算(axis)などの高度な操作が可能です。これらの操作により、データの変形や統計処理を効率的に行えます。特に画像処理やデータ分析の分野では、これらの操作が頻繁に使われます。
出力結果
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[0 1 2]
[4 5 6]]
[12 15 18 21]連想配列としての辞書(dict)の活用
Pythonでは辞書(dict)を使って連想配列を実現できます。連想配列は、数値のインデックスではなく、文字列などのキーを使ってデータにアクセスする仕組みです。これにより、より直感的で理解しやすいデータ管理が可能になります。
辞書は設定ファイルの読み込み、APIからのデータ処理、データベースレコードの表現など、幅広い用途で活用されています。
連想配列と辞書型(dict)の関係
連想配列とは、キーと値のペアでデータを管理するデータ構造のことで、Pythonでは辞書型がこの役割を果たします。通常の配列が0、1、2といった数値インデックスで要素にアクセスするのに対し、辞書では任意の文字列や数値をキーとして使用できます。これにより、データの意味を明確にしながら管理できるのが大きな利点です。
出力結果
['タヌキ', '5歳', '茶色']
{'name': 'タヌキ', 'age': 5, 'color': '茶色'}
タヌキは5歳で茶色
タヌキは5歳で茶色辞書の作成と基本操作
辞書の作成には波括弧({})を使用し、キーと値をコロン(:)で区切って指定します。作成後は、角括弧にキーを指定して値の参照、追加、更新、削除が可能です。存在しないキーにアクセスするとKeyErrorが発生するため、getメソッドを使って安全にアクセスすることもできます。
出力結果
ハリネズミ
{'type': 'ハリネズミ', 'age': 2, 'weight': 0.8}
{'type': 'ハリネズミ', 'age': 3}for文を使った辞書の処理
辞書をfor文で処理する際は、items、keys、valuesメソッドを活用します。itemsではキーと値のペアを、keysではキーのみを、valuesでは値のみを取得できます。これらのメソッドを使い分けることで、辞書の内容を効率的に処理できます。
出力結果
サルが15匹います
トラが3匹います
ペンギンが25匹います
['サル', 'トラ', 'ペンギン']Python配列作成の実践パターン集
実際のプログラム開発では、単純な配列(リスト)の作成だけでなく、データを条件に応じてフィルタリング(選別)・変換することなど、より実践的な配列操作が求められます。ここでは、日常的な開発でよく遭遇する配列作成パターンを具体例とともに紹介します。これらのテクニックを身につけることで、実用的なプログラムを効率的に書けるようになります。
条件を満たす要素だけを配列化する方法
特定の条件を満たすデータだけを配列に含めたい場合、if文やリスト内包表記を使ったフィルタリングが有効です。この方法により、大量のデータから必要な部分の抽出や異常値の除外ができ、特にリスト内包表記は簡潔で読みやすいコードとなります。
出力結果
[8, 12, 5, 15]
[2, 8, 12]入力値から配列を作成する方法
ユーザーからの入力やファイルから読み込んだ文字列データを配列に変換する処理は、実用的なプログラムでは欠かせません。splitメソッドを使って文字列を分割し、必要に応じてintやfloatでデータ型を変換します。この処理により、外部からの生データをプログラムが処理できる配列として扱えるようになります。
出力結果
['シマウマ', 'カンガルー', 'コアラ', 'パンダ']
[3, 7, 2, 9, 5]2次元配列として行列データを作成する方法
表形式のデータを扱う際は、2次元配列(リストのネスト構造)として表現します。各行を個別のリストとして作成し、それらを外側のリストに格納することで行列構造を実現できます。計算により特化したNumPyの2次元配列と比較すると、Pythonのネストしたリストは異なるデータ型を混在させることができるという特徴があります。
出力結果
[['オオカミ', 8, 35.5], ['フクロウ', 3, 1.2], ['クマ', 12, 180.0]]
['オオカミ', 8, 35.5]
[35.5, 1.2, 180.0]配列を扱う上でのよくあるエラーと対処法
配列操作でよく発生するエラーには、インデックスエラーや型エラーがあります。インデックスエラーは配列の範囲外にアクセスした際に発生し、型エラーは異なるデータ型を混在させた計算で起こります。これらのエラーを防ぐには、事前に配列の長さを確認したり、適切な型変換を行ったりする設計にすることが大切です。
出力結果
4番目の動物は存在しません
[3, 5, 8]よくある質問(Q&A)
Q: Pythonでリストと配列は同じものですか?
A: Pythonでは通常、リストが配列の役割を果たしますが、厳密には異なります。一般的な用途ではリストで十分ですが、大量の数字を扱うような数値計算にはNumPy配列が適しています。
Q: 空の配列はどうやって作りますか?
A: 中身が何もない空のリストは[]で作成できます。NumPyの場合はnp.array([])や、形状を指定してnp.empty((0,))などで作成可能です。
Q:配列のサイズを後から変更できますか?
A: Pythonのリストはappendやremoveといった関数で自由にサイズ変更が可能です。一方NumPy配列は基本的に固定サイズですが、np.resize()などで作り直す形であれば変更できます。
Q:多次元配列の要素にアクセスする方法は?
A: 2次元配列の場合、array[行][列]またはarray[行, 列](NumPyの場合)という形式でアクセスできます。
例:data[0][1]で1行目2列目にアクセス。
まとめ
Python配列の作成について、基本的なリスト操作から高度なNumPy配列まで幅広く解説してきました。初心者の方でも段階的に学習できるよう、実用的なサンプルコードとともに説明しました。
ポイント
- Pythonではリストが配列として機能し、柔軟なデータ管理が可能
- range関数やリスト内包表記で効率的な連番配列を作成できる
- NumPy配列は数値計算に特化した高性能な多次元配列を提供できる
- 辞書型により連想配列として意味のあるキーでデータアクセスが可能
- 条件フィルタリングや入力データ変換など実践的なパターンを習得することが重要
配列操作はプログラミングの基礎となる技術です。これらの知識を実際のコードで実践し、さらなるスキルアップを目指しましょう。
プログラミングを体系的に学ぶなら、実践的な問題を通じて手軽に学べるpaizaラーニングがおすすめです。Pythonの講座も公開していますのでぜひご覧ください。