リスト用の短い包含関数はありますか?


515

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

if list.contains(myItem):
    # do something

あなたの質問リストにサブ
smci

回答:


875

次の構文を使用できます。

if myItem in list:
    # do something

また、逆演算子:

if myItem not in list:
    # do something

リスト、タプル、セット、およびディクショナリー(チェックキー)の場合は問題ありません。

これはリストやタプルにO(n)の動作であるが、そのセットとdictsにO(1)操作。


1
numpy配列を含むリストで、これはnumpyインスタンスまたはnumpyインスタンス内の値をチェックしますか?
DanielMöller2017

注意してください!これはおそらくあなたが予想していなかったものと一致していますが、o='--skip'; o in ("--skip-ias"); # returns True !
Alex F

3
@AlexF:("--skip-ias")はタプルではなく文字列であるため一致します(括弧は(1)整数のように何もしません)。1タプルが必要な場合は、単一の項目("--skip-ias",)(または(1,))の後にコンマを追加する必要があります。
Blckknght 2018年

文字を比較する場合、これは大文字と小文字を区別しないことに注意してください。
Tillson、

65

他の人が言ったことに加えてinlist.__contains__メソッドを呼び出すこと、つまり、作成したクラスで定義することができ、Pythonを最大限に活用するのに非常に便利になることを知りたいと思うかもしれません。  

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

>>> 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
>>>         

5

Trueリストにアイテムの出現回数がFalse含まれているかどうか、またはリストに出現がないかまったく含まれていないかどうかを確認するために、最近この1行を思いつきました。を使用するとnext(...)、これにデフォルトの戻り値(False)が与えられ、リスト全体を実行するよりも大幅に速く実行されるはずです。

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


私の場合、Categoryというオブジェクトのリストがあり、Linkプロパティのみをテストする必要があるため、このソリューションは私の場合により適しています。おかげで
rodrigorf

3
any(item == test_item for item in list_to_test)私も思いますか?
誰かが

3

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

if myItem in list:
    #do things

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

if myItem not in list:
    #do things

15
index方法は戻りません-1の要素が存在しない場合、それはスローValueError例外を。
MondKin 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.