web-dev-qa-db-ja.com

リスト用のshort contains関数はありますか?

リストにアイテムが存在するかどうかを確認するために別のリストを収集するためにanyを使用している人がいますが、それを実行する簡単な方法はありますか?:

if list.contains(myItem):
    # do something
431
Joan Venge

この構文を使うことができます:

if myItem in list:
    # do something

また、逆演算子:

if myItem not in list:
    # do something

リスト、タプル、セット、辞書(チェックキー)に対してはうまくいきます。

これはリストとタプルではO(n)操作ですが、集合と辞書ではO(1)操作です。

746
defuz

他の人が言ったことに加えて、あなたはinがすることはlist.__contains__メソッドを呼び出すことであることを知ることに興味があるかもしれません。

ばかげた使用法は次のとおりです。

>>> class ContainsEverything:
    def __init__(self):
        return None
    def __contains__(self, *elem, **k):
        return True


>>> a = ContainsEverything()
>>> 3 in a
True
>>> a in a
True
>>> False in a
True
>>> False not in a
False
>>>         
60
Ant

リストに項目の出現回数がいくつでも含まれている場合はTrue、出現回数がまったく含まれていないかまったく含まれていない場合はFalseを取得するために、最近この1つのライナーを思い付きました。 next(...)を使用すると、これにデフォルトの戻り値(False)が与えられ、リスト内包表記全体を実行するよりもかなり速く実行する必要があることを意味します。

list_does_contain = next((True for item in list_to_test if item == test_item), False)

5
Dustin Raimondi

リストメソッドindexは、アイテムが存在しない場合は-1を返し、存在する場合はリスト内のアイテムのインデックスを返します。 ifステートメントでは、代わりに次のことを実行できます。

if myItem in list:
    #do things

次のifステートメントを使用して、要素がリストに含まれていないかどうかも確認できます。

if myItem not in list:
    #do things
3
Mr. Squig