109 votes

Trouver le premier et le dernier index d'une valeur dans une liste en Python

Y a-t-il des méthodes intégrées qui font partie des listes qui me donneraient le premier et le dernier indice d'une valeur, comme:

verts.IndexOf(12.345)
verts.LastIndexOf(12.345)

2 votes

Je les lis aussi, mais ne rien savoir du python rend les choses plus difficiles. Je trouve sa syntaxe très cryptique.

0 votes

Si vos listes sont triées, alors vous voudrez peut-être consulter le module bisect <docs.python.org/3/library/bisect.html>.

0 votes

Voir la brillante réponse de Dikei ici en utilisant les fonctions intégrées enumerate et reversed : stackoverflow.com/questions/9836425/…

4voto

tommy.carstensen Points 636

Utilisez i1 = votreliste.index(votreValeur) et i2 = votreliste.rindex(votreValeur).

4voto

Vlad Bezden Points 5024

Utilisation de max + enumerate pour obtenir la dernière occurrence d'un élément

rindex = max(i for i, v in enumerate(your_list) if v == your_value)

1voto

111 Points 17

Cette méthode peut être plus optimisée que ci-dessus :

def rindex(iterable, value):
    try:
        return len(iterable) - next(i for i, val in enumerate(reversed(iterable)) if val == value) - 1
    except StopIteration:
        raise ValueError

1voto

La bonne solution est celle qui met en place une "recherche inversée en boucle de niveau C".

En pseudo-code C :

for (int i = len(list) -1; i >= 0; i--)
    if list[i] == value:
        return i
raise NotFound

En Python, la bonne solution devrait être :

def rindex(lst, value):
    # reversed est un itérateur inversé intégré
    # operator.indexOf peut gérer cet itérateur
    # si la valeur n'est pas trouvée, cela lève
    #    une erreur ValueError : sequence.index(x) : x not in sequence
    _ = operator.indexOf(reversed(lst), value)
    # nous devons corriger l'index inversé
    return len(lst) - _ - 1

Mais il serait préférable d'avoir un index inversé intégré.

0voto

Elon Zhang Points 89
s.index(x[, i[, j]])

indice de la première occurrence de x dans s (à partir de l'index i et avant l'index j)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X