2009-08-27 14 views
67

Mam listę w języku Python i chcę sprawdzić, czy jakiekolwiek elementy są ujemne. Specman ma metodę has() dla list, który robi:Pythonowy sposób sprawdzania, czy warunek dotyczy dowolnego elementu listy.

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

Gdzie it jest Specman kluczowe mapowane do każdego elementu listy po kolei.

Uważam, że to dość eleganckie. Przejrzałem numer Python documentation i nie mogłem znaleźć niczego podobnego. Najlepszym mogę wymyślić było:

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

Uważam to raczej nieeleganckie. Czy istnieje lepszy sposób to zrobić w Pythonie?

Odpowiedz

118

any():

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

Ponadto, jeśli masz zamiar użyć "Prawda w ...", sprawiają, że wyrażenie generator więc nie ma O (n) Pamięć:

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

Użyj any().

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

Python ma wbudowaną funkcję any() do tego celu.

+0

Tylko 2,5. W przeciwnym razie musisz wykonać funkcję, być może za pomocą ifilter i wyjątków, lub bool (set ((x dla x jeśli cond)) lub tym podobne. –

+1

Zamiast skomplikowanej rzeczy ifilter, po prostu wykonaj: def any (it): dla el in: if el: return True; return False – Rory

Powiązane problemy