【Python入門】配列で要素を検索するには?対応メソッドや演算子の使い方まとめ

配列では、要素の追加・削除だけでなく、どのような要素が含まれているか検索することもできます。

Pythonでは様々なメソッドや演算子が用意されており、使用する場面にあわせて適切な手段を選択することが大切です。

この記事では、配列で検索を行う際に使用するメソッド・演算子の特徴と使い方について解説します。

メソッド…特定の値や変数に対して処理を行い、その結果を返す仕組みのこと

演算子…値の演算(+, -)大小の比較(<>)する際などに使われる記号・シンボルのこと

目次

各メソッド・機能の対応一覧

配列(リスト/タプル/辞書/セット)では様々な要素を保持することができますが、データ型によって使用できるメソッド・機能が異なってきます

配列内のデータ型と、対応するメソッド・演算子の一覧は以下の通りです。

スクロールできます
配列の要素in
(完全一致)
in
(部分一致)
indexcountstartswithendswith
文字列のみ
上記以外

配列内で要素を検索する方法

使用するメソッド・演算子によっては、部分的に一致する要素の検索や、該当する要素の数を確認するといった対応も可能です。

ここから先は、各検索方法の特徴や具体的な使い方について紹介していきます。

【in|完全一致】指定した値に合致する要素を検索

in演算子では、指定した値に合致する要素が存在するかどうかを検索できます。

使用する際は「要素 in 配列(変数)」の形で記述することで、全く同じ値があるかどうかを真偽値(TrueまたはFalse)で確認できます。

辞書に対して検索を行う場合は、keys/valuesメソッドを使って検索対象(キーor要素)を指定する必要があります

ls = ["テスト", 123, False]  # lsという変数に、リストを保持
print("test" in ls)  # ls(リスト)に「test」があるかどうかを表示

dc = {"key1": "テスト", "key2": 123, "key3": False}  # dcという変数に、辞書を保持
print("key1" in dc.keys())  # dc(辞書)に「key1」があるかどうかを表示
print("test" in dc.values())  # dcに「test」があるかどうかを表示

= 実行結果 =

False

True
False

【in|部分一致】指定した値を含む(含まない)要素を検索

文字列のみで構成された配列であれば、部分的に一致する要素をリストとして取得することも可能です。

部分一致で検索する場合は、in演算子とともに「リスト内包表記」と呼ばれる特殊な記述法を使います。

リスト内包表記とin演算子を用いた条件式( in 文字列(変数))を組み合わせることで、部分的に一致する要素の取り出しができるようになります。

ls = ["apple", "banana", "peach", "lemon", "grape"]  # lsという変数に、リストを保持

ls_new = [word for word in ls if "le" in word]  # 要素内に「le」が含む値を取り出し、ls_newに保持
print(ls_new)  # ls_newの中身を表示

= 実行結果 =

['apple', 'lemon']

また、指定した値が含まれない要素を取り出したい場合は、条件式内で記載したin演算子の前に「not」を記述することで対応可能です。

ls = ["apple", "banana", "peach", "lemon", "grape"]  # lsという変数に、リストを保持

ls_new = [word for word in ls if "le" not in word]  # 「le」が含まれない要素を取り出し、ls_newに保持
print(ls_new)  # ls_newの中身を表示

= 実行結果 =

['banana', 'peach', 'grape']

【index】指定した値の位置を検索

index()メソッドでは、指定した要素がどこに存在するかを検索することができます。

使用する際は、配列(変数)の後に「.index(要素)」の形で記述すと、対象の位置番号を取得できます。

なお、index()で指定する要素が配列内に複数存在する場合、取得できるのは一番最初(左側)にある要素のみになるので注意してください。

ls = ["テスト", 123, False, "テスト", 3.14, "テスト"]  # lsという変数に、リストを保持

print(ls.index(3.14))  # ls(リスト)から「3.14」を検索して表示
print(ls.index("テスト"))  # lsから「テスト」を検索して表示(最初の要素の番号のみ)

= 実行結果 =

4
0

要素ごとにラベル(キー)がついている「辞書型」や、要素の位置に意味を持たない「セット型」では検索の必要性がないため、基本はリストやタプルを対象とした使用になります。

【count】指定した値がいくつ含まれるかを検索

count()メソッドでは、指定した要素がいくつ存在するかを検索できます。

使用する際は、検索したい配列(変数)の後に「.count(要素)」の形で記述することで、指定した要素の個数を取得できます。

なお辞書の場合、単純にcount()メソッドを適用させても要素の検索はできません。

そのため、以下の手順で対象となる要素のリストを作成する必要があります。

  1. key()あるいはvalues()メソッドで、検索対象(キーor要素)の一覧を取得する
  2. list()関数を使用し、①の結果(dict_keys型/dict_values型)をリスト化する

その後、リスト化した一覧の後ろに「.count(要素)」を記述することで、指定した要素の個数を取得できるようになります。

ls = ["テスト", 123, False, "テスト", 3.14, "テスト"]  # lsという変数に、リストを保持
print(ls.count("テスト"))  # ls(リスト)内にある「テスト」の個数を表示

dc = {1: "test", 2: 123, 3: False, 4: "テスト", 5: "test"}  # dcという変数に、辞書を保持
dc_v = list(dc.values())  # dc_vという変数に、要素の一覧(dc.values())をリスト化して保持
print(dc_v.count("test"))  # dc_v(リスト)より、「test」の個数を表示

= 実行結果 =

3
2

【startswith】先頭が一致する(一致しない)要素を検索

startswith()メソッドを使うと、指定した値を先頭に含む要素(文字列)かどうかが判断できます。

また、対象となる要素を取り出しリストを作成する方法として、「リスト内包表記」と呼ばれる記述法を使います。

リスト内包表記については、上で紹介した『in演算子(部分一致)』にて詳しく説明しています

startswith()では、確認したい文字列(変数)の後に「.startswith()」の形で記述すると、 先頭が合致するかどうかを真偽値(TrueまたはFalse)で確認できます。

こちらをリスト内包表記の条件式に組み込むことで、該当する要素の取り出しとリスト化が可能です。

ls = ["Tanaka", "Suzuki", "Takahashi", "Sato"]  # lsという変数に、リストを保持

ls_new = [word for word in ls if word.startswith("Ta")]  # 「Ta」が含まれる要素を取り出し、ls_newに保持
print(ls_new)  # ls_newの中身を表示

= 実行結果 =

['Tanaka', 'Takahashi']

また、先頭が合致しない要素を取り出したい場合は、リスト内で記載したifの後にnotを記述すれば対応できます。

ls = ["Tanaka", "Suzuki", "Takahashi", "Sato"]  # lsという変数に、リストを保持

ls_new = [word for word in ls if not word.startswith("Ta")]  # 「Ta」が含まれない要素を取り出し、ls_newに保持
print(ls_new)  # ls_newの中身を表示

= 実行結果 =

['Suzuki', 'Sato']

【endswith】末尾が一致する(一致しない)要素を検索

endswith()メソッドを使うと、指定した値を末尾に含む要素(文字列)かどうかが判断できます。

また、対象となる要素を取り出しリストを作成する方法として、「リスト内包表記」と呼ばれる記述法を使います。

リスト内包表記については、上で紹介した『in演算子(部分一致)』にて詳しく説明しています

endswith()では、確認したい文字列(変数)の後に「.endswith()」の形で記述すると、 末尾が合致するかどうかを真偽値(TrueまたはFalse)で確認できます。

こちらをリスト内包表記の条件式に組み込むことで、該当する要素の取り出しとリスト化が可能です。

ls = ["Yamaguchi", "Suzuki", "Takahashi", "Sato"]  # lsという変数に、リストを保持

ls_new = [word for word in ls if word.endswith("hi")]  # 「hi」が含まれる要素を取り出し、ls_newに保持
print(ls_new)  # ls_newの中身を表示

= 実行結果 =

['Yamaguchi', 'Takahashi']

また、末尾が合致しない要素を取り出したい場合は、リスト内で記載したifの後にnotを記述すれば対応できます。

ls = ["Yamaguchi", "Suzuki", "Takahashi", "Sato"]  # lsという変数に、リストを保持

ls_new = [word for word in ls if not word.endswith("hi")]  # 「hi」が含まれない要素を取り出し、ls_newに保持
print(ls_new)  # ls_newの中身を表示

= 実行結果 =

['Suzuki', 'Sato']

まとめ

この記事では、配列で検索を行う際に使用するメソッド・演算子の使い方について解説しました。

配列内の検索ができるようになると、様々な条件に応じた処理ができるようになります。

プログラミングを行う上では必要不可欠な操作なので、しっかりと学んでおくようにしましょう。

シェアはこちらから
目次