リスト 文法・環境

【python】リスト(list)の要素の検索方法【完全一致、部分一致、インデックス・個数取得、リスト内包表記】

pythonのリスト(list)の要素を検索する方法について紹介します。

リストの要素の検索方法について、下記の内容をサンプルコードを交えながら紹介します。

この記事で分かること

  • 要素を完全一致で検索し、リストに含まれているか調べる方法
  • 要素を完全一致で検索し、インデックスを取得
  • 要素を完全一致で検索し、個数を取得
  • リストの要素を部分一致で検索

スポンサーリンク

要素を完全一致で検索し、リストに含まれているか調べる方法

値がリストに含まれているか調べるためには、" in演算子 " を使用します。

リスト内に値が含まれる場合は、Trueが返されます。

書き方

値 in リスト

以下、サンプルコードです。

### 要素を in演算子 で検索し、リストに含まれるか調べる
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

print("App" in list_1)
# False
print("Apple" in list_1)
# True

サンプルコードから分かる通り、

"in演算子" は、完全一致での検索になります。

スポンサーリンク

要素を完全一致で検索し、インデックスを取得【何番目の要素か検索】

リスト内に含まれる要素を検索し、インデックスを取得したい場合は、indexメソッドを使用します。

書き方

リスト.index( 値 )

以下、サンプルコードです。

### 要素を検索し、インデックスを取得する
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

print(list_1.index("Banana"))
# 1

indexメソッドで、簡単にリストのインデックスが取得できることが分かったかと思います。

補足として、indexメソッドの不便な点と、その不便を補う例2つ紹介します。

【補足】indexメソッドで、リスト内に含まれない値を指定した場合に、エラー停止を避ける方法

indexメソッドは、リストに含まれていない値の場合は、エラー停止してしまいます。

### リストに含まれていない値を検索した場合はエラーとなる。
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

print(list_1.index("Ban"))
# 'Ban' is not in list

リストに含まれていない値を検索する可能性がある場合は、

"in演算子 と組み合わせることで、エラー停止を回避できます。

以下、サンプルコードです。

### リストに含まれない値を指定した場合でも、エラー停止しない例
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

search_value = "Ban"

if search_value in list_1 :
    print(list_1.index(search_value))
else :
    print("None")
# None

【補足】indexメソッドで、リスト内の要素が重複している場合に、すべての要素のインデックスを取得する方法

indexメソッドは、リストに重複した要素が含まれる場合、先頭の要素のインデックスのみを返します。

### リストに重複した要素が含まれる場合は、先頭の要素のインデックスが返される
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

print(list_1.index("Banana"))
# 1

このサンプルコードでは、"Banana"は、リスト内に2つありますが、

インデックスは先頭の要素の "1" だけが返されています。

indexメソッドで、リスト内の重複した要素すべてのインデックスを取得したい場合は、

リスト内包表記と、enumurate関数を組み合わせることで実現できます

リスト内包表記にて、 " if + 条件式 " で要素を検索します。

" if "を含む、リスト内包表記の書き方は下記のとおりです。

リスト内包表記の書き方

[式 for 任意の変数名 in リスト if 条件式]

" if + 条件式 " がTrueとなるリストの要素を取り出し、式に与え、

この式の結果を要素とする、新たなリストを返します。

enumerate関数は、リストから、インデックスと要素を同時に取得できる関数です。

上記の、リスト内包表記と、enumerateを組み合わせると、

リスト内の重複した要素すべてのインデックスを取得するコードは下記のように記述できます。

### 重複した要素すべてのインデックスを取得する
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]
print([i for i, x in enumerate(list_1) if x == 'Banana'])
# [1, 4]

このように、リスト内包表記を用いることで、簡潔に記載できます。

なお、内包表記とenumerate関数については、下記の記事で紹介しています。併せて確認してみてください。

スポンサーリンク

要素を完全一致で検索し、個数を取得

リスト内に含まれる要素を検索し、リスト内に含まれる個数を取得したい場合は、countメソッドを使用します。

書き方

リスト.count( 値 )

以下、サンプルコードです。

### 要素を検索し、リストに含まれる個数を取得する
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

print(list_1.count("Apple"))
# 1
print(list_1.count("Ban"))
# 0

リストの(list)の要素を部分一致で検索【含む、ワイルドカード】

上記で紹介した検索は、完全一致での検索方法でした。

リスト内の要素を、部分一致で検索する方法を紹介します。

下記は、リスト内の要素を部分一致で検索し、インデックスを返すサンプルコードです。

### リスト内の要素を部分一致で検索し、インデックスを返す
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

search_value = "Ban"
index_list = []

for i, e in enumerate(list_1) :
    if search_value in e :
        index_list.append(i)

print(index_list)
# [1, 3, 4]

リスト内包表記の場合は、下記のようになります。

### リスト内の要素を部分一致で検索し、インデックスを返す【リスト内包表記】
list_1 = ["Apple", "Banana", "Orange", "Bana", "Banana"]

search_value = "Ban"

print([i for i, x in enumerate(list_1) if search_value in x])
# [1, 3, 4]

スポンサーリンク

まとめ

pythonのリスト(list)の要素を検索する方法について紹介しました。

"in演算子" は頻繁に使用するので、覚えておくようにしましょう。

スポンサーリンク

-リスト, 文法・環境
-,