Pythonische Methode zum Überprüfen, ob eine Bedingung für ein Element einer Liste gilt

110

Ich habe eine Liste in Python und möchte überprüfen, ob Elemente negativ sind. Specman hat die has()Methode für Listen, die Folgendes bewirkt:

x: list of uint;
if (x.has(it < 0)) {
    // do something
};

Wo itist ein Specman-Schlüsselwort, das nacheinander jedem Element der Liste zugeordnet ist?

Ich finde das ziemlich elegant. Ich habe die Python-Dokumentation durchgesehen und konnte nichts Ähnliches finden. Das Beste, was ich mir einfallen lassen konnte, war:

if (True in [t < 0 for t in x]):
    # do something

Ich finde das eher unelegant. Gibt es eine bessere Möglichkeit, dies in Python zu tun?

Nathan Fellman
quelle

Antworten:

186

any () :

if any(t < 0 for t in x):
    # do something

Wenn Sie "True in ..." verwenden möchten, machen Sie es zu einem Generatorausdruck, damit kein O (n) -Speicher benötigt wird:

if True in (t < 0 for t in x):
Ken
quelle
1
Korrektur: Wenn Sie verwenden True in ...möchten, überdenken Sie es und verwenden Sie es anystattdessen.
Aran-Fey
29

Verwenden Sie any().

if any(t < 0 for t in x):
    # do something
Daniel Pryden
quelle
10

Python hat genau für diesen Zweck eine eingebaute any () -Funktion.

Rory
quelle
Nur 2,5+. Andernfalls müssen Sie eine Funktion erstellen, möglicherweise mit ifilter und Ausnahmen oder bool (set ((x für x if cond))) oder dergleichen.
Gregg Lind
1
Anstelle eines komplizierten ifilter-Dings tun Sie einfach: def any (it): für el darin: if el: return True; Rückkehr Falsch
Rory