【Python】リスト(list)とは:基本から応用まで使い方をまとめて紹介

時計 2022.12.20 / 時計

【Python】リスト(list)とは:基本から応用まで使い方をまとめて紹介

記事ではPythonリストlist)について詳しく解説していきます。リストは複数の値をまとめるデータ型であり、Pythonでプログラムを組む上で必ず利用します。

Pythonのリストはミュータブル(変更可能)なデータ型のため、生成したのちに要素を追加したり、値の変更、要素の削除といった操作が可能です。

本記事を参考にして、リストの基本から応用まで使い方の理解を深めてください。

リスト

リストとは

リストとは複数の値を順番に格納できるデータ型です。まず最初は複数の値を収めることができる仕切りのある入れ物だと考えてください。1つ1つの値は仕切りでスペースが区切られています。このスペースに格納されている値を要素と呼びます。また各要素はインデックス番号が振られており、インデックス番号「0」からスタートします。

Python:リストとは

リストは次のようにブラケット([と])でくくり、要素は半角のカンマで区切って記述します。

[100, 200, 300]

リストはイミュータブル(変更可能)であり、先頭や末尾、中間など好きな場所に要素を追加できますし、順番に取り出すことも簡単にできます。

リストを利用することで関連性の高い値を1つのリストでまとめることができ、プログラムを書くときにコードを簡潔に書けるようになります。

他の言語では配列(array)と呼ばれるものと性質が似ています。

リストの特徴

リストの特徴を以下にまとめてご紹介します。

リストの特徴
  • 複数の値を順番に格納する
  • 各要素にはインデックス番号が振られる
  • インデックス番号は0から始まる
  • イミュータブル(変更可能)なため、好きな箇所に要素を追加・削除ができる
  • 格納する要素は型が異なっても可

リストで使用する用語集

リストの説明でよく利用される用語を以下にまとめます。

用語 意味
リスト 複数の値を順番に格納できるデータ型
要素 リストに格納されている値
インデックス(番号) 要素を指定するために各要素に振られている番号。先頭から順に0から番号が振られる
ブラケット リストを生成するのに使用する記号([と])

リストの生成

リストの生成方法は以下の通りです。

  • 値をブラケットでくくる
  • list関数
  • スライス
  • リスト内包表記

リストの生成:値をブラケットでくくる

リストの生成として一般的に使用されている方法が、カンマ区切りの値を[と]でくくる方法です。

構文

変数名 = [値1, 値2, …]

リストに格納する各値の型は異なっても大丈夫です。ですが基本的には同一の型で統一した方が良いでしょう。以下に生成例を記します。

>>> names = ["田中", "鈴木", "佐藤"]
>>> names
 ['田中', '鈴木', '佐藤']

空のリストを生成したい場合は、次のように値は入れずに[]とします。

# 空のリストを作成する
lists = []

空のリストとは中身がなにも入っていないことを意味し、プログラム内ではリストが空かどうかで処理を分けることもあります。リストが空かどうかを判別する方法については以下記事をご参照ください。

リスト生成時の最後のカンマ

リストを生成する際に、以下のように最後の値の後ろにカンマを付ける人がいます。

names = ["田中", "鈴木", "佐藤",]

この最後のカンマは付けても付けなくても動作に違いはありません。ただ今後もリストに値をつけ足していく場合は、最後の値の後ろにカンマを付けたほうが付け忘れを防ぐことができます。特に以下のように値ごとに改行してリストを生成する場合は、カンマを付けることをお勧めします。

names = [
    "田中",
    "鈴木",
    "佐藤",
]

リストの生成:list関数

リストの生成は組み込み関数のlist関数からでも生成することができます。

構文

list((値1, 値2, …))

以下に生成例を記します。

>>> names = list(("田中", "鈴木", "佐藤"))
>>> names
['田中', '鈴木', '佐藤']

range関数と組み合わせることで、次のように連続した数値のリストを簡単に生成できます。

>>> numbers = list(range(10))
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

単語の文字を1つ1つリストの要素として格納したい場合もlist関数は利用できます。

>>> word = "office54"
>>> lists = list(word)
>>> lists
['o', 'f', 'f', 'i', 'c', 'e', '5', '4']

リストの生成:スライス記法

スライス記法を用いることで、リストから一部を切り取ったリストを生成することができます。

スライス記法はブラケット[と]の中に開始インデックスと終了インデックスを「:」で区切って使用します。

構文

変数[開始インデックス番号: 終了インデックス]

開始インデックスから終了インデックスまでの要素を含んだリストを生成(切り出す)します。以下に例を記します。

>>> names = ["田中", "鈴木", "佐藤",]
>>> names[1:3]
['鈴木', '佐藤']

スライスで指定する開始インデックスと終了インデックスは省略することもできます。省略すると開始インデックスでは0、終了インデックスでは-1が自動で適用されます。

>>> names = ["田中", "鈴木", "佐藤",]
>>> names[:2]
['田中', '鈴木']

>>> names[1:]
['鈴木', '佐藤']

リストの生成:リスト内包表記

既存のリストから新しいリストを生成するリスト内包表記いう方法があります。

リスト内包表記を利用することでコードが簡潔に記述でき、また若干ですが速度も速くなります。リスト内包表記について詳しい使い方は以下記事をご参照ください。

リストから要素の取得

インデックス番号

生成したリストから要素を取得するにはリストの変数名と要素のインデックス番号を使います。

構文

変数[インデックス番号]

例えば次のリストから2番目の要素を取り出す場合はlists[1]とします。インデックス番号は0から始まることに注意してください。

>>> lists = list(("田中", "鈴木", "佐藤"))
>>> lists[1]
鈴木

リストに存在しないインデックスを指定すると、IndexErrorというインデックスが範囲外である旨を知らせるエラーが発生します。

>>> names = ["田中", "鈴木", "佐藤",]
>>> names[3]
IndexError: list index out of range

リストの末尾の要素を取得したい場合はインデックスに「-1」を指定します。

>>> names = ["田中", "鈴木", "佐藤",]
>>> names[-1]
佐藤

pop()メソッド

pop()メソッドをリストに使うと、指定したインデックス番号の値を取得し、リストからその値(要素)を削除します。

構文

変数.pop(インデックス番号)

>>> names = ["田中", "鈴木", "佐藤",]
>>> names.pop(0)
'田中'

>>> names
['鈴木', '佐藤']

pop()メソッドの引数にインデックス番号を指定しない場合、末尾の要素を指定します。

>>> names = ["田中", "鈴木", "佐藤",]
>>> names.pop()
'佐藤'

>>> names
names

リストへの値(要素)の追加

append()メソッド

リストへ要素を追加するにはappend()メソッドを使用します。

構文

変数.append(値)

append()メソッドで要素を追加すると末尾に追加されます。以下に例を記します。

>>> lists = ['python', 'Django']
>>> lists.append('Java')
>>> lists
['python', 'Django', 'Java']

insert()メソッド

リストの指定した場所に要素を追加したい場合はinsert()メソッドを使用します。

構文

変数.insert(インデックス番号, 値)

第一引数に指定したインデックスに、第二引数で指定した値を追加します。以下に例を記します。

>>> lists = ['python', 'Django']
>>> lists.insert(1, 'Java')
>>> lists
['python', 'Java', 'Django']

リストから要素の削除

リストから要素を削除する方法は以下に記す3つの方法があります。

  • remove()メソッド
  • pop()メソッド
  • del

remove()メソッド

リストから要素を削除するにはremove()メソッドを使用します。

構文

変数.remove(値)

remove()メソッドの引数には、削除したい要素の値を指定します。削除したい要素のインデックス番号ではないので注意してください。

>>> lists = ['python', 'Django']
>>> lists.remove('python')
>>> lists
['Django']

リストに存在しない要素を削除しようとするとValueErrorが発生します。

>>> lists = ['python', 'Django']
>>> lists.remove('office54')
>>> lists
ValueError: list.remove(x): x not in list

なにも対策をせずに上記のようなエラーが発生するととプログラムは異常終了します。エラーが発生してもプログラムを停止させないためには例外処理を行ってください。

pop()メソッド

すでに「リストから要素の取得」で解説していますが、pop()メソッドを利用することで、インデックスで指定した要素を削除できます。

>>> names = ["田中", "鈴木", "佐藤",]
>>> names.pop(0)
'田中'

>>> names
['鈴木', '佐藤']

del

インデックスで指定した要素にdelを利用することで、その指定した要素を削除できます。

>>> names = ["田中", "鈴木", "佐藤",]
>>> del names[0]
>>> names
['鈴木', '佐藤']

リストの要素を更新

リストの要素の値を更新するにはインデックスを使用します。以下に例では2番目の要素の値を更新しています。

>>> lists = ['python', 'Django']
>>> lists[1] = 'office54'
>>> lists
['python', 'office54']

リストの要素数をカウントする

リストに含まれている要素数をカウントするにはlen()関数を使用します。要素の数を知りたいリストをlen()関数の引数に指定します。

>>> names = ["田中", "鈴木", "佐藤",]
>>> len(names)
3

リストの値を入れ替える

リスト内の値を入れ替えるにはアンパック代入を利用します。アンパック代入については以下記事をご参照ください。

アンパック代入を利用して、リスト内の値を入れ替える(交換)方法については以下記事をご参照ください。

リストを結合

2つのリストを結合するにはextend()メソッドを使用します。

構文

変数1.extend(変数2)

>>> names = ["田中", "鈴木", "佐藤",]
>>> y = ["伊東"]
>>> names.extend(y)
>>> names
['田中', '鈴木', '佐藤', '伊東']

リストの初期化

リストの初期化(空にする)にはclear()メソッドを使用します。clear()メソッドの引数にはなにも指定しません。

構文

変数.clear()

>>> names = ["田中", "鈴木", "佐藤",]
>>> names.clear()
>>> names
[]

リストの要素を並び替える(ソート):昇順、降順

リスト内の要素を並び替えるにはsort()メソッドを使用します。要素を昇順にするには単にsort()メソッドを変数に使用します。

>>> numbers = [4,7,2,6]
>>> numbers.sort()
>>> numbers
[2, 4, 6, 7]

降順に並び替えたい場合は、sort()メソッドの引数にreverse=Trueを指定します。

>>> numbers = [4,7,2,6]
>>> numbers.sort(reverse=True)
>>> numbers
[7, 6, 4, 2]