Vous pouvez utiliser la méthode du filtre:
>>> lst = [1, 2, 3, 4, 5]
>>> filter(lambda x: x % 2 == 0, lst)
[2, 4]
ou une compréhension de la liste:
>>> lst = [1, 2, 3, 4, 5]
>>> [x for x in lst if x %2 == 0]
[2, 4]
EDIT: pour trouver (un seul élément), vous pouvez essayer:
>>> (x for x in lst if x % 2 == 0).next()
2
Bien que cela lancerait une exception si rien ne correspond, alors vous voudrez probablement envelopper dans un essai/catch. Les parenthèses() en font une expression de générateur plutôt qu'une compréhension de liste.
Personnellement si je venais d'utiliser le filtre régulier/compréhension et prendre le premier élément (s'il y en a un).
Ceux-ci soulèvent une exception si rien ne se trouve
filter(lambda x: x % 2 == 0, lst)[0]
[x for x in lst if x %2 == 0][0]
Ces listes de retour vides
filter(lambda x: x % 2 == 0, lst)[:1]
[x for x in lst if x %2 == 0][:1]
Merci! C'est pour findall. Qu'en est-il de trouver? –
Au lieu d'une compréhension du générateur, vous pouvez également utiliser itertools.ifilter (Func, liste) .next() qui est un peu plus proche de la syntaxe désirée. – Brian
Vous pouvez également utiliser itertools.dropwhile (lambda x: non func (x), liste) qui ne sera pas jeté une exception si la liste contient aucun élément qui satisfait le prédicat. Il a aussi l'avantage de pouvoir court-circuiter si l'élément désiré se présente avant la fin de la liste. – EfForEffort