Obtenir le premier indice de la liste contenant la sous-chaîne de caractères?
Pour les listes, la méthode list.index(x)
renvoie l'index dans la liste du premier élément dont la valeur est x
. Mais si je veux regarder à l'intérieur de la liste des éléments, et pas seulement au niveau de l'ensemble des éléments, comment puis-je faire le plus Pythoninc méthode pour cela?
Par exemple, avec
l = ['the cat ate the mouse',
'the tiger ate the chicken',
'the horse ate the straw']
cette fonction serait de retour 1
fourni avec l'argument tiger
.
InformationsquelleAutor c00kiemonster | 2010-01-31
Vous devez vous connecter pour publier un commentaire.
Un non-slicky méthode:
Avec un one-liner:
Variation de abyx solution (optimisé pour l'arrêt quand le match est trouvé)
Si vous êtes pré 2.6 vous aurez besoin de mettre la
next()
à la finC'est tout à fait lisse et assez efficace.
Seul problème, c'est que cela va augmenter StopIteration si l'élément n'est pas trouvé (même si c'est facile de remédier).
return next((i for i,j in enumerate(lst) if predicate(j)), -1)
(Python 2.6+)Remarque: Cela contribuera à accroître la
ValueError
dans le cas où aucune correspondance n'est trouvée, ce qui est mieux à mon avis.min()
. @Etienne: c'est un générateur d'expression, pas une compréhension de liste, de sorte qu'il ne génère pas de tout.à mon humble avis avec cette ligne, vous trouverez uniquement la première occurence sans traitement de l'ensemble de la liste
index = next((i for i in enumerate(l) if "tiger" in i[1]),[-1,-1])[0]