Pythonowy sposób sprawdzania, czy warunek jest spełniony dla dowolnego elementu listy


111

Mam listę w Pythonie i chcę sprawdzić, czy jakiekolwiek elementy są ujemne. Specman ma has()metodę dla list, która:

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

Gdzie itjest słowo kluczowe Specman mapowane po kolei na każdy element listy.

Uważam to za raczej eleganckie. Przejrzałem dokumentację Pythona i nie mogłem znaleźć niczego podobnego. Najlepsze, co mogłem wymyślić, to:

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

Uważam to za raczej nieeleganckie. Czy jest lepszy sposób na zrobienie tego w Pythonie?

Odpowiedzi:


187

dowolny () :

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

Ponadto, jeśli zamierzasz użyć „True in ...”, utwórz z niego wyrażenie generatora, aby nie zajmowało pamięci O (n):

if True in (t < 0 for t in x):

1
Korekta: jeśli zamierzasz używać True in ..., rozważ ponownie i użyj anyzamiast tego.
Aran-Fey,


10

Python ma wbudowaną funkcję any () dokładnie w tym celu.


Tylko 2.5+. W przeciwnym razie musisz utworzyć funkcję, być może używając ifilter i exceptions, lub bool (set ((x for x if cond))) lub podobnej.
Gregg Lind

1
Zamiast skomplikowanego ifiltera, po prostu zrób: def any (it): for el in it: if el: return True; powrót False
Rory
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.