アイテムが配列/リストにあるかどうかを確認します


203

文字列の配列がある場合、forループを実行せずに文字列が配列内にあるかどうかを確認できますか?具体的には、ifステートメント内でそれを行う方法を探しているので、次のようなものです。

if [check that item is in array]:

3
質問はすでにここで
Tarun Ande

1
またはより良いここに:stackoverflow.com/questions/12934190/...
torina

回答:


396

あなたが「配列」と言うところの「リスト」を意味すると仮定すると、あなたはすることができます

if item in my_list:
    # whatever

これは、リストだけでなく、あらゆるコレクションで機能します。辞書の場合、指定されたキーが辞書に存在するかどうかをチェックします。


1
@jdiとそのループは、Pythonで明示的にコーディングされたものよりもはるかに高速に実行されます。
Mark Ransom 2012年

17

また、「配列」と言うときは、「リスト」を意味するものと想定します。Sven Marnachのソリューションは優れています。リストで繰り返しチェックを行う場合は、それをセットまたはフローズンセットに変換することをお勧めします。これにより、各チェックの速度が向上します。strsのリストが呼び出されていると仮定しますsubjects

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever

3

ラムダ関数を使用します。

配列があるとしましょう:

nums = [0,1,5]

5が次の場所にあるかどうかを確認しnumsます。

(len(filter (lambda x : x == 5, nums)) > 0)

このソリューションはより堅牢です。これで、特定の条件を満たす数値が配列にあるかどうかを確認できますnums

たとえば、5以上の数値がに存在するかどうかを確認しnumsます。

(len(filter (lambda x : x >= 5, nums)) > 0)

これはPython2で動作します。Pythonの3.7を使用すると、このエラーメッセージが表示されます:TypeError: object of type 'filter' has no len()
Jun711

1

配列には.valuesを使用する必要があります。たとえば、列名を持つデータフレームがあるとします。つまり、test ['Name']を実行できます。

if name in test['Name'].values :
   print(name)

通常のリストでは、.valuesを使用する必要はありません


.valuesを使用するには、Pandas DataFrameオブジェクトが必要だと思います。
troymyname00 2018

-3

配列にも同じ構文を使用できます。たとえば、Pandasシリーズ内での検索:

ser = pd.Series(['some', 'strings', 'to', 'query'])

if item in ser.values:
    # do stuff
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.