「リスト」は、Pythonを学習し始めてすぐに出てくる単語です。
他のプログラミング言語では「配列」という語でお馴染みなので、プログラミング経験者には親しみのある考え方ですが、初心者にとっては難しい壁の一つです。
この記事では、Pythonに触れ始めて間もない方に向け「リストとはどういうものか」を解説した後、「Pythonにおけるリストの使い方」を説明します。
他のプログラミング言語で「配列」は使っていたけれどPythonではどんな機能があるんだろうと思っている方は、Pythonにおけるリストの基本操作からお読みください。
# この記事のコードは全て、Python 3.7、macOS Mojaveで動作確認しました。
AIやデータサイエンスを学びたくてPythonを学び始めたけど
「独学ではやっぱり限界がある」
と不安を感じた方にオススメしたいのが、Aidemy Premium Plan。
AIに関する幅広い種類の講座や徹底したコーチング指導が特徴です!
実務を見据えてPythonをがっつり学習していきたい方は、まずは無料の「オンライン相談」に参加してみてください。
また、Aidemy Premium Planのメリットやデメリットなどについては、以下の記事も参考にしてください。
Aidemy(アイデミー)の評判と口コミまとめ!受講したほうがいい理由を紹介
Pythonで使用されるリストとは
初めに、Pythonで使用される「リスト」とは何かについて説明します。
まずは押えておきたいデータ型
Pythonでは、我々が見ている文字の種類を、見えない次元で区別しています。
例えば、「1」と表示されている場合でも、それが文字としての「1」なのか、整数としての「1」なのかで処理の方法が変わります。
「1」を文字として捉えた場合、「1」+「1」は、「1」と「1」を横に並べるという解釈になり、「11」が出力されます。
一方、「1」を整数として捉えた場合の「1」+「1」は、小学校1年生のときに習った足し算と同様に、「2」という結果が出力されます。
以下は、Pythonの基本的なデータ型をまとめました。
データ型 | 例 |
整数(int) | -2, -1, 0, 1,2 |
浮動小数点数(float) | -1.5, -0.75, 0.0, 1.7, 3.28 |
文字列 | ‘a’, ‘bb’, ‘あいう’, ‘6日’ |
リストは複数のデータを扱うことができる型
リストは、整数・浮動小数・文字列といったデータ型を複数含むことができる箱のようなものです。
例えば、
animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’]
という形をしており、これはanimalsという箱の中に4つの文字列を含んでいることを意味します。
また、それぞれの文字列には、先頭から0、1、2、3という数字(インデックス)が対応しており、animals[1]は’cat’を示します。
リストの中には、整数や浮動小数などの数を入れることができますし、リストの中にリストを入れることもできます。
リストの他にも、複数のデータを含むデータ型は存在します。
以下の表をご覧ください。
データ型 | 説明 |
リスト | 一度定義しても後から変更することができるデータ型 |
タプル | リストとほぼ同様だが、一度定義したら変更することができないデータ型 |
辞書 | リストにおけるインデックスを任意の値(キー)に設定できるデータ型 |
集合 | 数学の集合の概念と似ており、重複した要素がなく、順序を持たないデータ型 |
リスト機能の使いどころ
Pythonのリスト機能は以下のような時に役立ちます。
- 後で使う同系統のデータをまとめておく
- PythonライブラリNumpyを用いた行列計算
リストにデータを入れておくと、for文などを用いてCSVファイルに書き出す作業が楽になります。
また、リストと数値計算ライブラリNumpyを組み合わせると、数学の行列計算のような複雑な計算を行うことができるので、リストはデータサイエンスや機械学習にも欠かせない機能になっています。
Pythonにおけるリストの基本操作
ここでは、リストを作成(定義)するところから、取り出し・変更・削除・連結といった基本操作を解説します。
リストの作成(定義)
リストを定義する方法は2つあります
[]で作成
(リスト名) = [(リストの要素)]とすることでリストを定義できます。
[code language=”python”]height = [166, 171, 176, 168, 172][/code]
これは、heightという名前のリストに、166、171、176、168、172という要素を入れることを表します。
list関数で作成
(リスト名) = list((リストの要素))とすることでリストを定義できます。
[code language=”python”]name = list(‘ARASHI’)[/code]
これは、nameという名前のリストに、’A’、’R’、’A’、’S’、’H’、’I’という要素を入れることを表します。
list関数は1〜100までを要素とするような、引数に反復可能オブジェクトを設定するようなリストを定義する場合に有効です。
しかし、慣れるまでは扱いづらいので、初めのうちは[]でリストを作成しましょう。
リストから1つの値を取り出す(インデックス指定)
リストから値を取り出す場合は、リスト名の横にインデックスを指定します。
[code language=”python”]height = [166, 171, 176, 168, 172] # リストの定義
height[1] # 171を表す[/code]
インデックス番号は0から始まるので、
インデックス | 0 | 1 | 2 | 3 | 4 |
値 | 166 | 171 | 176 | 168 | 172 |
のような対応になります。
また、取り出した要素同士で演算をすることができます。
[code language=”python”]height[0] + height[4] # 166+172の結果を表す[/code]
インデックスにマイナスの値を設定することもできます。
-1はリスト末尾の要素、-2はリスト末尾から2番目と対応していきます。
[code language=”python”]height[-2] # 168を表す[/code]
リストから複数の値を取り出す(スライス指定)
インデックスで要素を指定した場合は要素を1つ取り出すことができましたが、スライスで指定すると複数の値を取り出すことができます。
スライスは[a:b]とすることで指定できます。
これはa以上b未満のインデックスを指定することを意味します。
[code language=”python”]height = [166, 171, 176, 168, 172] # リストの定義
height[1:3] # [171,176]を表す
height[0:4] # [166, 171, 176, 168]を表す[/code]
また[a:]はa以上、[:b]はb未満、[:]はすべてのインデックスを指定することを意味します。
[code language=”python”]height[2:] # [176, 168, 172]を表す
height[:2] # [166, 171]を表す
height[:] # [166, 171, 176, 168, 172]を表す[/code]
リスト内の値を変更する
リスト内の値を変更するには、インデックスを用いて変えたい値を取り出してから、新しい値を代入すれば良いだけです。
以下は、animalsというリストのelephantをmonkeyに変更するプログラムです。
[code language=”python”]animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’] # リストの定義
animals[3] = ‘monkey’ # リストの値の変更
animals # [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’]を表す[/code]
リストの値を削除する
リストの値を削除するには、del文を用いれば可能です。
[code language=”python”]animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’] # リストの定義
del animals[2] # インデックス2の’rabbit’削除
animals # [‘dog’, ‘cat’, ‘elephant’]を表す[/code]
リストを連結する
+演算子を用いることで、連結したリストを新たに生成することができます。
[code language=”python”]a = [‘Python’, ‘HTML’, ‘CSS’] # リストの定義
b = [‘Ruby’, ‘PHP’] # リストの定義
a + b # [‘Python’, ‘HTML’, ‘CSS’, ‘Ruby’, ‘PHP’]を表す[/code]
Pythonのメソッドを使ったリストの操作
Pythonでは、メソッドというあらかじめ用意されている関数を用いることで、多様なリストの操作が可能になります。
メソッドは、リスト名にドット(.)をつけた後に添えることができます。
リストの末尾に値を追加する: append()メソッド
値をappend()メソッドに渡すことで、リストの末尾にその値を追加することができます。
[code language=”python”]animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’] # リストの定義
animals.append(‘owl’) # ’owl’をリストの末尾に追加
animals # [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’, ‘owl’]を表す[/code]
リストの任意の位置に値を追加する: insert()メソッド
値をappend()メソッドに渡すことで、リストの任意の位置にその値を追加することができます。
[code language=”python”]animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’] # リストの定義
animals.append(2, ‘owl’) # ‘owl’をインデックス2の位置に追加
animals # [‘dog’, ‘cat’, ‘owl’, ‘rabbit’, ‘elephant’]を表す[/code]
リストから値を削除する: remove()メソッド
del文では、「インデックスを指定して」リストから値を削除しました。
remove()メソッドでは、「値を指定して」リストから値を削除します。
[code language=”python”]animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’] # リストの定義
animals.remove(‘rabbit’) # ‘rabbit’削除
animals # [‘dog’, ‘cat’, ‘elephant’]を表す[/code]
リストの中から値を検索する: index()メソッド
値をindex()メソッドに渡すことで、その値のインデックスを知ることができます。
[code language=”python”]animals = [‘dog’, ‘cat’, ‘rabbit’, ‘elephant’] # リストの定義
animals.index(‘cat’) # 1を表す[/code]
リストの中に同じ値が複数ある場合は、インデックスの中で数が小さい方を返します。
リスト内の値を並び替える: sort()メソッド
sort()メソッドを使用すると、リスト内の値を1,2,3…やa,b,c…順に並び替えることができます。
[code language=”python”]height = [166, 171, 176, 168, 172] # リストの定義
height.sort() # 値を昇順に並び替える
height # [166, 168, 171, 172, 176]を表す[/code]
また、()内にreverse=Trueを指定すると、逆順になります。
[code language=”python”]height.sort(reverse=True)
height # [176, 172, 171, 168, 166]を表す[/code]
Pythonのリスト機能を用いた応用的な使い方
最後に、諸機能を組み合わせたリストの応用的な使い方を紹介いたします。
for文とリストの組み合わせ
for文を使うことで、リストの中身を順番に取り出すことができます。
[code language=”python”]height = [166, 171, 176, 168, 172] # リストの定義
for i in height: # heightの中身を順番に取り出す
print(i) # 166, 171, 176, 168, 172を出力する[/code]
リスト内包表記
リスト内包表記は、通常のリスト生成では複雑になってしまうようなプログラムを、一行で書けてしまう表記方法です。
ただし、この機能は難しいため、まだPythonに慣れていない人は読み飛ばしても構いません。
リスト内包表記では、あるリストの値を2倍したリストを生成したい場合は次のように書きます。
[code language=”python”]height = [166, 171, 176, 168, 172] # リストの定義
height_twice = [i*2 for i in height] # [332, 342, 352, 336, 344]を表す[/code]
リスト内包表記は、一般的に
と表されます。
上の例をなぞると、
しています。
とても煩雑ですが、高速な数値処理もできるので使いこなせるようにしましょう。
まとめ: Pythonのリスト機能はPython学習に欠かせない
Pythonのリスト機能は、Pythonでプログラムを書いていく時に欠かせない機能です。
それゆえ、記述が簡単になっていたり、メソッドが多く用意されていたりします。
リスト機能を使いこなして、Pythonでたくさんプログラムを書いていきましょう!