今回は、Pythonでリストの中の文字列を探す方法を紹介します。
Pythonでリストの中の文字列を検索する
この問題には、使いやすさから効率性まで、様々なアプローチがあります。
in演算子の使用
Python の in 演算子を使って、Python のリストに含まれる文字列を見つけることができます。
これは二つのオペランド a
と b
を受け取り、次のような形式になります。
ret_value = a in b
|
ここで、 ret_value
はブール値で、 a
が b
の中にあれば True
と評価され、そうでなければ False
と評価されます。
この演算子は次のように直接使うことができます。
a = [ 1 , 2 , 3 ]
b = 4
if b in a:
print ( '4 is present!' )
else :
print ( '4 is not present' )
|
結果は以下の通りです。
出力
4 is not present
|
また、使いやすいようにこれを関数に変換することもできます。
def check_if_exists(x, ls):
if x in ls:
print ( str (x) + ' is inside the list' )
else :
print ( str (x) + ' is not present in the list' )
ls = [ 1 , 2 , 3 , 4 , 'Hello' , 'from' , 'Python' ]
check_if_exists( 2 , ls)
check_if_exists( 'Hello' , ls)
check_if_exists( 'Hi' , ls)
|
結果は以下の通りです。
出力
2 is inside the list
Hello is inside the list
Hi is not present in the list
|
これは、リストの中の文字列を検索する方法として最もよく使われ、推奨される方法です。
しかし、説明のために、他の方法も紹介します。
この記事もチェック:PythonでリストをJSON文字列に変換する方法
リスト理解力の活用
別のケースとして、文字列がリスト上の他の単語の一部であるかどうかだけをチェックし、自分の単語がリスト項目のサブストリングであるような単語をすべて返したい場合を考えてみましょう。
以下のようなリストを考えてみましょう。
ls = [ 'Hello from Python' , 'Hello' , 'Hello boy!' , 'Hi' ]
|
もしリストのすべての要素から Hello
という部分文字列を探したいなら、次のような形式のリスト内包を使うことができます。
ls = [ 'Hello from Python' , 'Hello' , 'Hello boy!' , 'Hi' ]
matches = [match for match in ls if "Hello" in match]
print (matches)
|
これは以下のコードと同等で、単純に2つのループを持ち、条件をチェックします。
ls = [ 'Hello from Python' , 'Hello' , 'Hello boy!' , 'Hi' ]
matches = []
for match in ls:
if "Hello" in match:
matches.append(match)
print (matches)
|
どちらの場合も、出力は次のようになる。
[ 'Hello from Python' , 'Hello' , 'Hello boy!' ]
|
出力では、すべてのマッチが文字列の一部として Hello
を含んでいることがわかります。
any()」メソッドの使用
入力した文字列がリストのどの項目にも含まれているかどうかを調べたい場合、 any() メソッドを使用することができます。
例えば、’Python’がリストのいずれかの項目に含まれるかどうかを調べたい場合は、以下のようにします。
ls = [ 'Hello from Python' , 'Hello' , 'Hello boy!' , 'Hi' ]
if any ( "Python" in word for word in ls):
print ( ''Python' is there inside the list!' )
else :
print ( ''Python' is not there inside the list' )
|
結果は以下の通りです。
'Python' is there inside the list !
|
フィルタとラムダを使う
また、ラムダ関数に対しても filter()
メソッドを使用することができます。
ラムダ関数は、その行でのみ定義される単純な関数です。
ラムダは、その行でのみ定義される単純な関数です。
ラムダは、呼び出した後は再利用できないミニ関数だと考えてください。
ls = [ 'Hello from Python' , 'Hello' , 'Hello boy!' , 'Hi' ]
# The second parameter is the input iterable # The filter() applies the lambda to the iterable # and only returns all matches where the lambda evaluates # to true filter_object = filter ( lambda a: 'Python' in a, ls)
# Convert the filter object to list print ( list (filter_object))
|
結果は以下の通りです。
[ 'Hello from Python' ]
|
期待通りの結果が得られました。
まとめ
今回は、入力リストから文字列を検索する方法について、さまざまなアプローチで学習しました。
あなたの問題解決に役立てば幸いです。