Pythonのリストを検索する方法まとめ

Pythonのリストの要素を検索する方法は複数あります。

  • 要素があるかどうか検索したいなら in 演算子
  • 要素の位置を検索したいならindex()
  • 要素の個数を検索したいならcount()

を使います。

それぞれ、解説していきたいと思います。

目次

1. リストに値が含まれているかどうかを検索する

ある値がリストに含まれているかどうかを検索するには in 演算子を使います。

1.1. in 演算子で検索する

「探したい値 in リスト」の式を書き、含まれている場合は True, 含まれていない場合は False が返ってきます。

実際に見てみましょう。

In [1]:
#リストを作ります。
colors = ["red", "blue", "green", "yellow"]

このリストの中に”red”が含まれているかどうか検索してみましょう。

In [2]:
#"colors"というリストに"red"が含まれているか検索します。
"red" in colors
Out[2]:
True

このように含まれている場合は、Trueを返ってきます。

それでは、このリストの中に”orange”は含まれているでしょうか?

In [3]:
#同リストに"orange"が含まれているか検索します。
"orange" in colors
Out[3]:
False

このように含まれていない場合は、False と返ってきます。

1.2. in 演算子は完全一致の場合のみ True を返す

ただし 「検索したい値 in リスト名」の表記には問題が1つあります。それは、 “in”は検索したい値と、リスト内の値が完全一致していなければ、True を返さないという点です。

具体的に見てみましょう。

In [4]:
#新しいリストを作ります。
customers = ["山田太郎", "鈴木一郎", "高橋二朗", "渡辺三郎"]
In [5]:
#リスト内に"山田”という文字は含まれているでしょうか?
"山田" in customers
Out[5]:
False

このように、リスト内に”山田”という文字列が含まれていても、リスト内の1つの要素としてインデックスされているのは”山田太郎”という文字列です。”in”による検索は、完全一致の場合のみ True を返すので、「山田太郎」では検索できても「山田」ではできないのです。

1.3. 部分一致検索を行う方法

部分一致の場合でも、True を返ってくるようにするには、リスト内の要素を全て取り出した後で検索する必要があります

要素の取り出しについては「Pythonのリストから要素を取り出す方法」で解説しています。

この記事では for 文を使って、全部の要素を取り出しているのですが、これを使って以下のようなコードを書くと、部分一致検索ができるようになります。

In [3]:
#リストを作ります。
customers = ["山田太郎", "鈴木一郎", "高橋二郎", "渡辺三郎"]
 
#for文を書きます。
for item in customers :
    #nameから取り出した要素がcusotmers内にあればTrueになります。
    if "山田" in item :
        result = True
        #該当する要素が見つかった時点でブレイクします。
        break
result
Out[3]:
True

for文については、「Pythonのfor文」で解説しています。

2. 要素の位置を検索する

検索した要素の位置を調べるには、index()メソッドを使います。早速みていきましょう。

2.1. index()メソッドで検索する

In [1]:
#IDリストを作成します。
id_list = ["a403", "b504", "c483", "d927", "e829"]
 
#index()メソッドを使って位置を検索します。
id_list.index("b504")
Out[1]:
1

このように、index()メソッドは、要素が見つかった位置のインデックス番号を返します。

2.2. 検索したい要素が存在しない場合は ValueError を返す

なお、位置を検索したい要素が存在しない場合は次のようにValueErrorを返します。

In [2]:
#IDリストを作成します。
id_list = ["a403", "b504", "c483", "d927", "e829"]
 
#index()メソッドを使って位置を検索します。
id_list.index("b50")
Error
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-cef7720bab1c> in <module>()
      2 id_list = ["a403", "b504", "c483", "d927", "e829"]
      3 #index()メソッドを使って位置を検索します。
----> 4 id_list.index("b50")
ValueError: 'b50' is not in list

このValueErrorを利用して、try文による例外処理を組み込み、次のようなコードを書くことができます。

In [3]:
#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) + "番目の会員です。")
idを入力(qで終了):a403
1番目の会員です。
idを入力(qで終了):213
メンバーではありません
idを入力(qで終了):q
終了しました。

while文とtry文は、それぞれ「PythonのWhile文」「Pythonのtry文」でご確認ください。

3. 個数を検索する

リスト内のある要素の個数を検索するには count()メソッドを使います。早速見てみましょう。

3.1. count()メソッドを使う

In [1]:
#リストを作成します。
numbers = [1, 5, 5, 10, 10, 10, 15, 15, 15,  20]

まず 2 は何個あるか検索してみましょう。

In [2]:
#リスト内に2は何個あるでしょうか?
numbers.count(2)
Out[2]:
0

0個ですね。

10 の個数も検索してみましょう。

In [3]:
#10は何個あるでしょうか?
numbers.count(10)
Out[3]:
3

3個ですね。

3.2. 個数の検索も完全一致のものがカウントされる

5は何個あるでしょうか?

In [4]:
#5は何個あるでしょうか?
numbers.count(5)
Out[4]:
2

2個ですね。count()メソッドは完全一致で答えを返すので、15 は含まれません。

なお、完全一致でなければカウントされないのは、文字列の場合も変わりません。

リストの要素の個数の検索機能を使うと、以下のようなコードを書くことができます。リストに含まれている要素の数のうち、半数以上が 1 なら合格となるプログラムです。

In [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("不合格")
 
合格



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる