Pythonのリストの要素を検索する方法は複数あります。
- 要素があるかどうか検索したいなら in 演算子
- 要素の位置を検索したいならindex()
- 要素の個数を検索したいならcount()
を使います。
それぞれ、解説していきたいと思います。
1. リストに値が含まれているかどうかを検索する
ある値がリストに含まれているかどうかを検索するには in 演算子を使います。
1.1. in 演算子で検索する
「探したい値 in リスト」の式を書き、含まれている場合は True, 含まれていない場合は False が返ってきます。
実際に見てみましょう。
#リストを作ります。
colors = ["red", "blue", "green", "yellow"]
このリストの中に”red”が含まれているかどうか検索してみましょう。
#"colors"というリストに"red"が含まれているか検索します。
"red" in colors
このように含まれている場合は、Trueを返ってきます。
それでは、このリストの中に”orange”は含まれているでしょうか?
#同リストに"orange"が含まれているか検索します。
"orange" in colors
このように含まれていない場合は、False と返ってきます。
1.2. in 演算子は完全一致の場合のみ True を返す
ただし 「検索したい値 in リスト名」の表記には問題が1つあります。それは、 “in”は検索したい値と、リスト内の値が完全一致していなければ、True を返さないという点です。
具体的に見てみましょう。
#新しいリストを作ります。
customers = ["山田太郎", "鈴木一郎", "高橋二朗", "渡辺三郎"]
#リスト内に"山田”という文字は含まれているでしょうか?
"山田" in customers
このように、リスト内に”山田”という文字列が含まれていても、リスト内の1つの要素としてインデックスされているのは”山田太郎”という文字列です。”in”による検索は、完全一致の場合のみ True を返すので、「山田太郎」では検索できても「山田」ではできないのです。
1.3. 部分一致検索を行う方法
部分一致の場合でも、True を返ってくるようにするには、リスト内の要素を全て取り出した後で検索する必要があります
要素の取り出しについては「Pythonのリストから要素を取り出す方法」で解説しています。
この記事では for 文を使って、全部の要素を取り出しているのですが、これを使って以下のようなコードを書くと、部分一致検索ができるようになります。
#リストを作ります。
customers = ["山田太郎", "鈴木一郎", "高橋二郎", "渡辺三郎"]
#for文を書きます。
for item in customers :
#nameから取り出した要素がcusotmers内にあればTrueになります。
if "山田" in item :
result = True
#該当する要素が見つかった時点でブレイクします。
break
result
for文については、「Pythonのfor文」で解説しています。
2. 要素の位置を検索する
検索した要素の位置を調べるには、index()メソッドを使います。早速みていきましょう。
2.1. index()メソッドで検索する
#IDリストを作成します。
id_list = ["a403", "b504", "c483", "d927", "e829"]
#index()メソッドを使って位置を検索します。
id_list.index("b504")
このように、index()メソッドは、要素が見つかった位置のインデックス番号を返します。
2.2. 検索したい要素が存在しない場合は ValueError を返す
なお、位置を検索したい要素が存在しない場合は次のようにValueErrorを返します。
#IDリストを作成します。
id_list = ["a403", "b504", "c483", "d927", "e829"]
#index()メソッドを使って位置を検索します。
id_list.index("b50")
このValueErrorを利用して、try文による例外処理を組み込み、次のようなコードを書くことができます。
#IDリストを作成します。
id_list = ["a403", "b504", "c483", "d927", "e829"]
#while文を書きます。
while True :
id = input("idを入力(qで終了):")
if id =="q" :
print("終了しました。")
break
try :
pos = id_list.index(id)
except :
print("メンバーではありません")
else:
print(str(pos +1) + "番目の会員です。")
while文とtry文は、それぞれ「PythonのWhile文」「Pythonのtry文」でご確認ください。
3. 個数を検索する
リスト内のある要素の個数を検索するには count()メソッドを使います。早速見てみましょう。
3.1. count()メソッドを使う
#リストを作成します。
numbers = [1, 5, 5, 10, 10, 10, 15, 15, 15, 20]
まず 2 は何個あるか検索してみましょう。
#リスト内に2は何個あるでしょうか?
numbers.count(2)
0個ですね。
10 の個数も検索してみましょう。
#10は何個あるでしょうか?
numbers.count(10)
3個ですね。
3.2. 個数の検索も完全一致のものがカウントされる
5は何個あるでしょうか?
#5は何個あるでしょうか?
numbers.count(5)
2個ですね。count()メソッドは完全一致で答えを返すので、15 は含まれません。
なお、完全一致でなければカウントされないのは、文字列の場合も変わりません。
リストの要素の個数の検索機能を使うと、以下のようなコードを書くことができます。リストに含まれている要素の数のうち、半数以上が 1 なら合格となるプログラムです。
#リストを作成します。
result = [1, 1, 0, 0, 1,1, 0, 0, 1, 1]
#"half"はリスト"result"の要素の個数の半分です。
half = len(result)/2
#1の個数がpointになります。
point = result.count(1)
#pointが半数以上なら合格、それ以外は不合格です。
if point >= half :
print("合格")
else :
print("不合格")
コメント