Is er een korte bevat-functie voor lijsten?

Ik zie dat mensen anygebruiken om een andere lijst te verzamelen om te zien of een item in een lijst bestaat, maar is er een snelle manier om zoiets te doen?

if list.contains(myItem):
    # do something

Antwoord 1, autoriteit 100%

U kunt deze syntaxis gebruiken:

if myItem in list:
    # do something

Ook inverse operator:

if myItem not in list:
    # do something

Het werkt prima voor lijsten, tuples, sets en dicts (controleertoetsen).

Merk opdat dit een O(n)-bewerking is in lijsten en tupels, maar een O(1)-bewerking in sets en dictaten.


Antwoord 2, autoriteit 7%

Naast wat anderen al hebben gezegd, ben je misschien ook geïnteresseerd om te weten dat wat indoet, is het aanroepen van de methode list.__contains__, die je kunt definiëren op elke klas die je schrijft en kan extreem handig worden om python in zijn volle omvang te gebruiken.  

Een dom gebruik kan zijn:

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

Antwoord 3

Ik heb onlangs deze oneliner bedacht om Truete krijgen als een lijst een willekeurig aantal exemplaren van een item bevat, of Falseals het geen exemplaren of niets bevat op alle. Het gebruik van next(...)geeft dit een standaard retourwaarde (False) en betekent dat het aanzienlijk sneller zou moeten werken dan het uitvoeren van het hele lijstbegrip.

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


Antwoord 4

De lijstmethode indexretourneert -1als het item niet aanwezig is, en retourneert de index van het item in de lijst als het wel aanwezig is. Als alternatief kunt u in een if-statement het volgende doen:

if myItem in list:
    #do things

Je kunt ook controleren of een element niet in een lijst staat met het volgende if-statement:

if myItem not in list:
    #do things

Antwoord 5

Er is ook de lijstmethode:

[2, 51, 6, 8, 3].__contains__(8)
# Out[33]: True
[2, 51, 6, 3].__contains__(8)
# Out[33]: False

Antwoord 6

Er is een andere methode die indexgebruikt. Maar ik weet niet zeker of dit een fout heeft of niet.

list = [5,4,3,1]
try:
    list.index(2)
    #code for when item is expected to be in the list
    print("present")
except:
    #code for when item is not expected to be in the list
    print("not present")

Uitvoer:

niet aanwezig

Other episodes