Maneira pitônica de verificar se uma condição é válida para qualquer elemento de uma lista

111

Tenho uma lista em Python e quero verificar se algum elemento é negativo. Specman tem o has()método para listas que faz:

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

Onde ité uma palavra-chave Specman mapeada para cada elemento da lista por vez.

Acho isso bastante elegante. Eu olhei a documentação do Python e não consegui encontrar nada semelhante. O melhor que pude pensar foi:

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

Acho isso um tanto deselegante. Existe uma maneira melhor de fazer isso em Python?

Nathan Fellman
fonte

Respostas:

187

qualquer () :

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

Além disso, se você for usar "True in ...", torne-a uma expressão geradora para que não ocupe memória O (n):

if True in (t < 0 for t in x):
Ken
fonte
1
Correção: se você for usar True in ..., reconsidere e use em seu anylugar.
Aran-Fey
29

Use any().

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

Python tem uma função any () embutida exatamente para esse propósito.

Rory
fonte
2,5+ apenas. Caso contrário, você terá que fazer uma função, talvez usando ifilter e exceções, ou bool (set ((x para x se cond))) ou algo parecido.
Gregg Lind,
1
Em vez de um ifilter complicado, basta fazer: def any (it): for el in it: if el: return True; retornar Falso
Rory