【Python】list(リスト)とはなんぞや?【リストの使い方】

Python

この記事では、Pythonの配列の一種であるリスト(list)について解説します。

この記事で学べること
  • リストとは?
  • リストの基本的な使い方
  • リストのメソッドの使い方

リストとは?

リストとは、任意の数の要素を持つことができるデータ型です。

タプルとは違い、要素の追加・削除・変更を行うことができます。後から要素を変更したい場合はリストを使いましょう。

リストの特徴
  • 可変(ミュータブル)
  • 同じ型の要素を格納することが多い
  • 汎用性が高い
  • シーケンス型である

リストの宣言・初期化

リストは以下のように宣言・初期化できます。

宣言

リストを宣言するには[]を使います。

変数 = []

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]
リスト[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)

実行結果

['あ', 'い', 'う']

filter関数とlambda式を詳しく知りたい方は、以下のリンクを参照してください。

【関連】Pythonの匿名関数ラムダ式を使おう!

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

内包表記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(リスト)

こうやって改めて見てみるとリストにはとてもたくさんの使い方やメソッドが実装されていますね!この量の内容を一度に覚えるのは難しいので使って慣れていっちゃいましょう。

それではまたいずこかで〜!

タイトルとURLをコピーしました