Überprüfen Sie, ob sich das Element in einem Array / einer Liste befindet

203

Wenn ich ein Array von Zeichenfolgen habe, kann ich überprüfen, ob sich eine Zeichenfolge im Array befindet, ohne eine forSchleife auszuführen? Insbesondere suche ich nach einer Möglichkeit, dies innerhalb einer ifAnweisung zu tun , also ungefähr so:

if [check that item is in array]:
SomeKittens
quelle
3
Ich denke , die Frage bereits beantwortet ist hier
Tarun Ande
1
Oder besser hier: stackoverflow.com/questions/12934190/…
Torina

Antworten:

393

Angenommen, Sie meinen "Liste", in der Sie "Array" sagen, können Sie dies tun

if item in my_list:
    # whatever

Dies funktioniert für jede Sammlung, nicht nur für Listen. Bei Wörterbüchern wird geprüft, ob der angegebene Schlüssel im Wörterbuch vorhanden ist.

Sven Marnach
quelle
1
@jdi, und diese Schleife läuft viel schneller als die explizit in Python codierte, ganz zu schweigen davon, dass sie einfacher zu lesen ist.
Mark Ransom
17

Ich gehe auch davon aus, dass Sie "Liste" meinen, wenn Sie "Array" sagen. Die Lösung von Sven Marnach ist gut. Wenn Sie die Liste wiederholt überprüfen, lohnt es sich möglicherweise, sie in einen Satz oder ein Frozenset umzuwandeln, was für jede Überprüfung schneller sein kann. Angenommen, Ihre Liste der Strs heißt subjects:

subject_set = frozenset(subjects)
if query in subject_set:
    # whatever
Michael Hoffman
quelle
3

Verwenden Sie eine Lambda-Funktion.

Angenommen, Sie haben ein Array:

nums = [0,1,5]

Überprüfen Sie, ob 5 in nums:

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

Diese Lösung ist robuster. Sie können jetzt überprüfen, ob sich eine Zahl in Ihrem Array befindet, die eine bestimmte Bedingung erfüllt nums.

Überprüfen Sie beispielsweise, ob eine Zahl größer oder gleich 5 vorhanden ist in nums:

(len(filter (lambda x : x >= 5, nums)) > 0)
Marquistador
quelle
Dies funktioniert mit Python2. Mit Python 3.7 erhalten Sie diesen Fehler:TypeError: object of type 'filter' has no len()
Jun711
1

Sie müssen .values ​​für Arrays verwenden. Angenommen, Sie haben einen Datenrahmen mit einem Spaltennamen, dh Sie können ['Name'] testen

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

Für eine normale Liste müssen Sie keine .values ​​verwenden

sam komo
quelle
Ich denke, Sie benötigen ein Pandas DataFrame-Objekt, um .values ​​zu verwenden.
troymyname00
-3

Sie können dieselbe Syntax auch für ein Array verwenden. Zum Beispiel bei der Suche innerhalb einer Pandas-Serie:

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

if item in ser.values:
    # do stuff
BCR
quelle