【Python入門】配列で要素を検索するには?対応メソッドや演算子の使い方まとめ
配列では、要素の追加・削除だけでなく、どのような要素が含まれているか検索することもできます。
Pythonでは様々なメソッドや演算子が用意されており、使用する場面にあわせて適切な手段を選択することが大切です。
この記事では、配列で検索を行う際に使用するメソッド・演算子の特徴と使い方について解説します。
各メソッド・機能の対応一覧
配列(リスト/タプル/辞書/セット)では様々な要素を保持することができますが、データ型によって使用できるメソッド・機能が異なってきます。
配列内のデータ型と、対応するメソッド・演算子の一覧は以下の通りです。
配列の要素 | in (完全一致) | in (部分一致) | index | count | startswith | endswith |
---|---|---|---|---|---|---|
文字列のみ | ● | ● | ● | ● | ● | ● |
上記以外 | ● | – | ● | ● | – | – |
配列内で要素を検索する方法
使用するメソッド・演算子によっては、部分的に一致する要素の検索や、該当する要素の数を確認するといった対応も可能です。
ここから先は、各検索方法の特徴や具体的な使い方について紹介していきます。
【in|完全一致】指定した値に合致する要素を検索
in
演算子では、指定した値に合致する要素が存在するかどうかを検索できます。
使用する際は「要素 in 配列(変数)」の形で記述することで、全く同じ値があるかどうかを真偽値(TrueまたはFalse)で確認できます。
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()
メソッドを適用させても要素の検索はできません。
そのため、以下の手順で対象となる要素のリストを作成する必要があります。
key()
あるいはvalues()
メソッドで、検索対象(キーor要素)の一覧を取得する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()
メソッドを使うと、指定した値を先頭に含む要素(文字列)かどうかが判断できます。
また、対象となる要素を取り出しリストを作成する方法として、「リスト内包表記」と呼ばれる記述法を使います。
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()
メソッドを使うと、指定した値を末尾に含む要素(文字列)かどうかが判断できます。
また、対象となる要素を取り出しリストを作成する方法として、「リスト内包表記」と呼ばれる記述法を使います。
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']
まとめ
この記事では、配列で検索を行う際に使用するメソッド・演算子の使い方について解説しました。
配列内の検索ができるようになると、様々な条件に応じた処理ができるようになります。
プログラミングを行う上では必要不可欠な操作なので、しっかりと学んでおくようにしましょう。