今回は、Pythonの意外なつまずきポイントである配列(リスト)について説明します。この記事では、
配列、リスト、NumPyといろいろあるけど、結局どうやって使い分ければいいの?
といった疑問に答えています。最後には、たくさんの記事を紹介していますので、1つ1つ試してみると配列やリストではこんなことができるのか!というところを感じていただけます。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
配列(リスト)を使うと同じようなデータをまとめて扱える
言葉の説明から始めましょう。皆さんは、日常生活で配列と聞いて何を思いつきますか。私は、プログラムの勉強を始めたときに、何も思いつかなかったことを良く覚えています。
配列は、完全にプログラミング関連の専門用語で初心者にはまったく理解できない言葉と言っていいでしょう。では、リストと聞いて何を思いつきますか。私は買い物チェックリスト(今なら、ほしい物リストでしょうか)が思いつきました。
たとえば正月に食べるおせち料理は、以下のようにチェックリストにして忘れないように買いますよね(しませんか?)
- かまぼこ
- 伊達巻き
- 栗きんとん
- 昆布巻き
そう考えるとリストは、日常で使われる言葉といって良さそうです。そこでこの記事では、Pythonのlist型オブジェクトのことを、単にリストと呼ぶことにします。そして、Pythonのリストも買い物チェックリストのようなデータをまとめて扱うのに適しています。
checklist = [ "かまぼこ", "伊達巻き", "栗きんとん", "昆布巻き" ] print(checklist)
実行結果:
['かまぼこ', '伊達巻き', '栗きんとん', '昆布巻き']
checklist = [“かまぼこ”, “伊達巻き”, “栗きんとん”, “昆布巻き”]と定義したリストを、print(checklist)の一文だけで、まとめて表示できました。ここで、もう少し言葉を決めておきましょう。
買い物チェックリスト全体(1枚の紙に書いたのであれば、その紙のこと)を、1つのリストと呼びます。もし2枚になるなら、2つのリストです。そして、紙に書いた1つ1つの商品のことを、1つの要素と呼びます。かまぼこが1つの要素です。
つまり、先ほどの買い物チェックリストには4つの要素が入っているわけです。リストと要素はこれから良く目にすることになりますので、よく覚えておきましょう。
リストを扱う2つの方法
さて、本題に戻りましょう。Pythonで配列のようなデータを扱うには、以下の2つの方法が有名です。
- Python標準のリスト(list)
- NumPyの配列(Numpy.ndarray)
では、Python標準のリスト(list)と、NumPyの配列(Numpy.ndarray)は、どのように使い分けると良いでしょうか。
要素1つ1つが大事ならPython標準のリスト(list)
要素の1つ1つが大事なら、Python標準のリスト(list)が良いでしょう。要素を1つ追加したり、1つ削除したりといった操作が多くなりそうであれば、Python標準のリスト(list)がオススメです。
そう考えると、上で紹介した買い物チェックリストのような場合は、Python標準のリスト(list)が良いことになりますね。
もちろん、このような場合でもNymPyのリスト(Numpy.ndarray)を使えます。効率を追求するなら、NumPyのリスト(Numpy.ndarray)を検討した方がいいでしょう。
リスト全体が大事ならNumPyの配列(Numpy.ndarray)
一方、要素ではなく配列全体が大事なら、NumPyの配列がおすすめです。たとえば、4月の最高気温を格納するといった場合です。
1日ごとの最高気温を気にしてもあまり意味は見いだせませんが、4月全体で最高気温の変動を見ると徐々に気温が上がっていく…わけでもなく、あまり変化しないことがわかりそうです。試しにグラフにしてみましょう。
import numpy as np import matplotlib.pyplot as plt date = np.array(range(1,31)) temp = np.array([ 22,25,23,26,21,22,22, 17,20,19,22,26,21,19, 22,20,15,16,22,26,26, 28,19,21,23,25,22,26, 26,26]) plt.plot(date, temp) plt.xlim([1,31]) plt.ylim([0,40]) plt.show()
実行結果:
date(日付)とtemp(気温)をNumPyのリスト(Numpy.ndarray)に格納し、plt.plot(date, temp)でグラフに点と線をまとめて描いています。
リストの使い方を見ていこう
ざっくりとした使い分けは伝わったと思いますので、ここからは少し具体的に、リストをどのように操作するのかを紹介します。とはいえ、リストの操作方法は多岐にわたり、この記事だけでは説明しきれませんので、侍エンジニアブログの他記事を紹介することにします。
まずは、Python標準のリスト(list)と、NumPyの配列(numpy.ndarray)の基本的な操作方法を紹介した記事です。どちらも同じように扱えることがわかります。
Python標準のリスト(list)の使い方
Python標準のリスト(list)の初期化方法や、要素の追加/削除、要素の検索など、基本的な操作方法を説明しています。
Python標準のリスト(list)の要素を1つ1つ見て行くにはfor文を使うのが一般的です。
Python標準のリスト(list)の要素を数えるにはlen関数を使いますが、それよりも高度な数え方をしたいときは、Counterを使います。
Python標準のリスト(list)は、タプルに変換したり、タプルからPython標準のリスト(list)に変換したりできます。
文字列を空白など任意の文字列で区切って、Python標準のリスト(list)に格納することもできます。単語1つ1つに注目したい場合によく使われる手法です。
逆に、Python標準のリスト(list)に文字列を格納しておき、join()で連結する方法もあります。
NumPyの配列(numpy.ndarray)の使い方
NumPyの基本的な使い方を説明した記事で、NumPyの配列(numpy.ndarray)も説明されています。
NumPyの配列(numpy.ndarray)を元にグラフを描画する場合は、matplotlibライブラリを使います。さりげなくこの記事でも使いました。
このほか、TensorFlowなど機械学習系のライブラリでもNumPyの配列(numpy.ndarray)が使われることがあります。
使用するリスト・配列の種類は、使用するライブラリにあわせて、十分に検討する必要があります。
まとめ
Pythonでは、配列(array)やリスト(list)と呼ばれるデータ構造は、Python標準のリスト(list)とNumPyの配列(numpy.ndarray)があること、さらにはその使い分けの方針を簡単に説明しました。
買い物チェックリストのように要素の1つ1つが大事ならPython標準のリスト(list)が良く、4月の気温のようにリスト全体が大事ならNumPyのリスト(numpy.ndarray)がおすすめでした。
その他にも、使用するライブラリによってNumPyのリスト(numpy.ndarray)を使わないといけない場合もありました。結論は至極当たり前なのですが、最終的な目的を見据えて、どちらのリストを使うか検討してくださいね。
なお、今Pythonを学習している方は以下の記事もどうぞ。
はじめてPythonを使う方でもわかりやすいように、Pythonでできることやその学習法などを中心にまとめています。
復習にも使えると思いますので、ぜひ一度ご覧になってみてくださいね。
【Python 入門完全攻略ガイド】