2010-05-04 17 views
2

J'ai une liste qui contient un certain nombre de choses:Existe-t-il une façon plus simple d'obtenir la première occurrence de quelque chose?

lista = ['a', 'b', 'foo', 'c', 'd', 'e', 'bar'] 

Je voudrais obtenir le premier élément de la liste qui répond à un prédicat, dire len(item) > 2. Y a-t-il une façon plus simple de le faire que de laisser tomber les outils et ensuite?

first = next(itertools.dropwhile(lambda x: len(x) <= 2, lista)) 

Je suis allé [item for item in lista if len(item)>2][0] au début, mais qui nécessite python pour générer d'abord la liste complète.

Répondre

7
>>> lista = ['a', 'b', 'foo', 'c', 'd', 'e', 'bar'] 
>>> next(i for i in lista if len(i) > 2) 
'foo' 
+1

Notez que la fonction suivante a été ajoutée dans 2.6. Si vous avez besoin de compatibilité avec 2.5 ou 2.4 alors utilisez '(i pour i dans lista si len (i)> 2) .next()' –

+0

Toujours oublier les générateurs ... –