この記事では、Pythonのリスト(list)について解説します。リストはPythonでよく使用されるコンテナオブジェクトです。汎用性が高く、使い勝手が良いのでとても重宝されています。それでは、リストの使い方を見ていきましょう!
リストとは?

リストとは、任意の数の要素を持つことができるデータ型です。要素の追加・削除・変更を行うことができ、汎用性の高いコンテナオブジェクトとなっています。
C言語の配列とは異なり、複数の型の要素を格納することもできます。
- 可変(ミュータブル)
- 同じ型の要素を格納することが多い
- 汎用性が高い
- シーケンス型である
リストの宣言・初期化

リストは以下のように宣言・初期化できます。
宣言
リストを宣言するには[]を使います。
変数 = []
list()を使っても宣言できます
変数 = list()
初期化
リストを初期化するには[]内に要素を「,(カンマ)」で区切って記述します。
変数名 = [要素1, 要素2, ..., 要素N]
サンプル
試しにリストを作成して出力してみます。
l1 = []
l2 = [1, 2, 3]
print(l1)
print(l2)
実行結果
[]
[1, 2, 3]
リストの要素を取得する

リストの要素にアクセスするには、以下の方法があります。
任意の要素にアクセスする[インデックス]
書式
インデックスから任意の要素にアクセスすることができます。以下のように[]内にアクセスしたい要素のインデックスを指定します。
リスト[インデックス]
サンプル
負の数を指定することで末尾の要素から取得することができます。
l = [1, 2, 3]
print(l[0])
print(l[1])
print(l[2])
print() # 改行
print(l[-1])
print(l[-2])
print(l[-3])
実行結果
1
2
3
3
2
1
任意の範囲の要素を取得する[スライス]
書式
スライスを使うことで任意の範囲の要素のみを取得することができます。スライスは以下のように記述します。
リスト[start:stop:step]
サンプル
試しに任意の範囲の要素のみを取得してみます。
l = [1, 2, 3, 4, 5]
print(l[1:4])
print(l[:3])
print(l[2:])
実行結果
[2, 3, 4]
[1, 2, 3]
[3, 4, 5]

各要素にアクセスする[for文]
書式
for文を使って各要素にアクセスすることができます。リストの要素が順番に変数に代入され要素の分だけ繰り返し処理します。
for 変数名 in リスト:
繰り返す処理
サンプル
以下のコードはvaluesの各要素にアクセスして出力しています。
values = [1, 2, 3]
for value in values:
print(value)
実行結果
1
2
3

要素をバラバラに取得する[アンパック]
リストはアンパックして取得することができます。リストの要素をバラバラにして変数に代入できます。
l = [1, 2, 3]
# 配列の要素分の変数で受け取る
l1, l2, l3 = l
print(l1, l2, l3)
実行結果
1, 2, 3
関数の引数としてリストをアンパックして渡すことができます。その際は、リスト名の前に「アスタリスク(*)」を付けて引数に指定します。
l = [1, 2, 3]
def func(one, two, three):
print(one)
print(two)
print(three)
# この呼び出しは「func(l[0], l[1], l[2])」と等価
func(*l)
実行結果
1
2
3

要素の変更[代入]

書式
変数と同様に代入することで要素を変更できます。[]で要素にアクセスして代入することで任意の要素を書き換えることができます。
リスト[インデックス] = データ
サンプル
試しに任意の要素を書き換えてみます。
array = ['one', 'two', 'three']
array[1] = 2
print(array)
実行結果
['one', 2, 'three']
要素の追加

リストに要素を追加する方法を紹介します。
任意の要素の追加[appendメソッド]
書式
appendメソッドを使って任意の要素を末尾に追加できます。
リスト.append(追加したい要素)
サンプル
試しに要素を追加してみます。
item = ['ひのきのぼう']
item.append('やくそう')
print(item)
実行結果
['ひのきのぼう', 'やくそう']
要素の連結[extendメソッド、+=演算子]
書式
extendメソッドを使って複数の要素を追加できます。引数にはリストやタプルなどのイテラブルオブジェクトを指定します。
リスト.extend(イテラブルオブジェクト)
サンプル
試しに要素をまとめて追加してみます。
array = [1, 2, 3]
array.extend([4, 5, 1])
print(array)
実行結果
[1, 2, 3, 4, 5, 1]
これは+=演算子で要素を連結させるのと等価です。
array = [1, 2, 3]
array += [4, 5, 1]
print(array)
実行結果
[1, 2, 3, 4, 5, 1]
任意のインデックスに要素を挿入[insertメソッド]
書式
insertメソッドを使って任意のインデックスに要素を挿入できます。第一引数に挿入したい場所(インデックス)を指定し、第二引数に追加する要素を指定します。
リスト.insert(インデックス, 要素)
サンプル
試しに任意のインデックスに要素を挿入してみます。
nums = [1, 2, 3]
nums.insert(2, 4)
print(nums)
実行結果
[1, 2, 4, 3]
要素の削除

リストの要素を削除する方法を紹介します。
任意の要素の削除[removeメソッド]
書式
removeメソッドを使って任意の要素を削除できます。引数に指定した要素が削除されます。指定された要素が複数格納されている場合は最初に見つけた要素のみが削除されます。
リスト.remove(削除したい要素)
サンプル
試しに要素を削除してみます。
nums = [1, 2, 3, 1]
nums.remove(1)
print(nums)
実行結果
[2, 3, 1]
要素を取り出す[popメソッド]
書式
popメソッドを使って要素を取り出せます。引数を指定しなければ末尾の要素が取り出されます。
リスト.pop()
インデックスを指定することで任意の場所の要素を取り出すことができます。
リスト.pop(インデックス)
サンプル
試しに要素を取り出してみます。
nums = [1, 2, 3, 4, 5]
# 一番後ろの要素の取り出す
num = nums.pop()
print(f'取り出した要素: {num}, nums: {nums}')
# 任意のインデックスの要素を取り出す
num = nums.pop(2)
print(f'取り出した要素: {num}, nums: {nums}')
実行結果
取り出した要素: 5, nums: [1, 2, 3, 4]
取り出した要素: 3, nums: [1, 2, 4]
全ての要素の削除[clearメソッド]
書式
clearメソッドを使って全ての要素を削除できます。
リスト.clear()
サンプル
試しにリストの要素を全て削除してみます。
nums = [1, 2, 3]
nums.clear()
print(nums)
実行結果
[]
並び替え

リストに格納された要素を並び替える方法を紹介します。
並び替える[sortメソッド]
書式
sortメソッドを使うことでリストを並び替えることができます。デフォルトでは昇順で並び替えられます。
リスト.sort()
reverseをTrueにすることで降順で並び替えができます。
リスト.sort(reverse=True)
サンプル
試しにリストを並び替えてみます。
array = [1, 2, 3, 1, 2]
# 昇順
array.sort()
print(array)
# 降順
array.sort(reverse=True)
print(array)
実行結果
[1, 1, 2, 2, 3]
[3, 2, 2, 1, 1]
逆順にする[reverseメソッド]
書式
reverseメソッドを使うことでリストの並びを逆順にすることができます。
リスト.reverse()
サンプル
試しにリストを逆順にしてみます。
array = [1, 2, 3, 1]
array.reverse()
print(array)
実行結果
[1, 3, 2, 1]
並び替えたリストを生成する[sorted関数]
書式
sorted関数を使うことで並び替えたリストを新しく生成できます。デフォルトでは昇順で並び替えられます。
並び替えたリストを受け取る変数 = sorted(リスト)
reverseをTrueにすることで降順で並び替えします。
並び替えたリストを受け取る変数 = sorted(リスト, reverse=True)
サンプル
試しに、並び替えたリストを新しく生成してみます。
array = [1, 2, 3, 1]
# 昇順
sort_array = sorted(array)
# 降順
sort_reverse_array = sorted(array, reverse=True)
print(f'並び替え前: {array}')
print(f'並び替え後(昇順): {sort_array}')
print(f'並び替え後(降順): {sort_reverse_array}')
実行結果
並び替え前: [1, 2, 3, 1]
並び替え後(昇順): [1, 1, 2, 3]
並び替え後(降順): [3, 2, 1, 1]
任意の要素のみを入れ替える
以下のように記述することで、任意の要素のみを入れ替えることができます。
vals = [1, 2, 3, 4, 5]
vals[1], vals[3] = vals[3], vals[1]
print(vals)
実行結果
[1, 4, 3, 2, 5]
要素の検索

リストに格納された要素を検索する方法を紹介します。
任意の要素のインデックスの取得[indexメソッド]
書式
indexメソッドを使うことで指定した要素のインデックスを取得できます。最初にマッチした要素のインデックスのみを取得します。
リスト.index(検索したい要素)
検索したい範囲を指定することができます。
リスト.index(検索したい要素, start, stop)
サンプル
試しに任意の要素のインデックスを取得してみます。
nums = [1, 2, 3, 1, 2, 3]
# 最初に見つけた要素のインデックスを返す
idx = nums.index(2)
print(idx)
# 検索範囲を指定してみる(3 <= N < 6)
idx = nums.index(2, 3, 6)
print(idx)
実行結果
1
4
任意の要素がの数を取得[countメソッド]
書式
countメソッドを使うことで指定した要素がリストにいくつ格納されているか取得できます。
リスト.count(数えたい要素)
サンプル
試しに任意の要素がいくつリストに格納されているか確認してみます。
name = ['ボ', 'ボ', 'ボ', 'ー', 'ボ', '・', 'ボ', 'ー', 'ボ', 'ボ']
count = name.count('ボ')
print(count)
実行結果
7
任意の要素が格納されているか[in演算子]
書式
in演算子を使うことで指定した要素がリスト内に格納されているか確認できます。要素が見つかった場合はTrue、見つからなかった場合はFalseが返されます。
検索したい要素 in リスト
サンプル
試しに任意の要素がリストに格納されているか確認してみます。
family = ['悟空', 'チチ', '悟飯', '悟天']
print('悟飯' in family)
print('ベジータ' in family)
実行結果
True
False
長さの取得 [len関数]

書式
len関数を使うことでリストの長さを取得できます。
len(リスト)
サンプル
試しにリストの長さを取得してみます。
nums = [1, 2, 3]
length = len(nums)
print(length)
実行結果
3
リスト内の文字列の結合[joinメソッド]

文字列型のjoinメソッドを使うことでリスト内の文字列同士を結合できます。
書式
文字列以外が格納されているリストを使用した場合はエラーが投げられます。
''.join(リスト)
文字列の部分を書き換えることで、結合部の文字を指定できます。
'結合部の文字'.join(リスト)
サンプル
試しに文字列を格納したリストを作成してjoinメソッドを使って結合させてみます。
array = ['あ', 'い', 'う', 'え', 'お']
aiueo = ''.join(array)
print(aiueo)
array = ['090', '1234', '5678']
# 結合部の文字を「-」に指定
tel = '-'.join(array)
print(tel)
実行結果
あいうえお
090-1234-5678
内包表記

リスト内包表記を使うことで、簡単にリストを生成できます。
書式
内包表記は以下のように記述します。
[式 for 変数 in 反復可能オブジェクト]
if文を記述することもできます。if文を定義することで条件式がTrueの要素のみが返されるようになります。
[式 for 変数 in 反復可能オブジェクト if 条件式]

サンプル
試しに内包表記でリストを生成してみます。
l = [i for i in range(5)]
print(l)
l = [i*i for i in range(5)]
print(l)
l = [i for i in range(5) if i % 2 == 0]
print(l)
実行結果
[0, 1, 2, 3, 4]
[0, 1, 4, 9, 16]
[0, 2, 4]
任意の要素をまとめて削除する

filter関数とlambda式を組み合わせることで指定した要素をまとめて削除できます。
filter関数の使い方
第一引数には、bool値を返す関数オブジェクトを指定します。
filter(関数オブジェクト, リスト)
filter関数の戻り値はイテレーターオブジェクトなのでlist()で変換します。
list(filter(関数オブジェクト, リスト))
サンプル
試しに指定した要素を全て削除してみます。
array = ['削除', 'あ', '削除', 'い', 'う', '削除']
# elem != '削除' で削除する要素を指定
array = list(filter(lambda elem: elem != '削除', array))
print(array)
実行結果
['あ', 'い', 'う']

任意の要素のインデックスを全て取得

内包表記とenumrate関数を組み合わせることで、指定した要素のインデックスを全て取得できます。以下のコードでは、リストに格納されている「1」のインデックスを全て取得しています。
array = [1, 2, 3, 1, 2, 3, 1, 2, 3]
# if v == 1 で要素を指定
idx = [i for i, v in enumerate(array) if v == 1]
print(idx)
実行結果
[0, 3, 6]
まとめ
この記事では、Pythonのリストの使い方を解説しました。
- 初期化 : リスト名 = [1, 2, 3]
- 要素の追加 : リスト.append(要素)
- 要素の削除 : リスト.remove(要素)
- 並び替え : リスト.sort()
- 要素の検索 : 検索したい要素 in リスト
- 長さの取得 : len(リスト)
リストにはたくさんのメソッドが実装されています。この量の内容を一度に覚えるのは難しいので徐々に慣れていきましょう!
それでは今回の内容はここまでです!ではまたどこかで〜( ・∀・)ノ