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?

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):

1
Correção: se você for usar True in ..., reconsidere e use em seu anylugar.
Aran-Fey


10

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.