Programmer la fonction derniere_occurrence
, prenant en paramètre un tableau non vide d'entiers et un entier cible
, et qui renvoie l'indice de la dernière occurrence de cible
.
Si l'élément n'est pas présent, la fonction renvoie la longueur du tableau.
On n'utilisera pas la fonction
index
Exemples
>>> derniere_occurrence([5, 3], 1)
2
1
est absent, on renvoie la longueur du tableau : 2
.
>>> derniere_occurrence([2, 4], 2)
0
2
est présent à l'indice 0
, on renvoie 0
.
>>> derniere_occurrence([2, 3, 5, 2, 4], 2)
3
2
est présent aux indices 0
et 3
, on renvoie le dernier : 3
def dernierepy-undoccurrence(tableau, cible):bksl-nl ...bksl-nlbksl-nl# testsbksl-nlbksl-nlassert dernierepy-undoccurrence([5, 3], 1) == 2bksl-nlassert dernierepy-undoccurrence([2, 4], 2) == 0bksl-nlassert dernierepy-undoccurrence([2, 3, 5, 2, 4], 2) == 3bksl-nlbksl-nldef dernierepy-undoccurrence(tableau, cible):bksl-nl indicepy-unddernier = len(tableau)bksl-nl for i in range(len(tableau)):bksl-nl if tableau[i] == cible:bksl-nl indicepy-unddernier = ibksl-nl return indicepy-unddernierbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert dernierepy-undoccurrence([5, 3], 1) == 2bksl-nlassert dernierepy-undoccurrence([2, 4], 2) == 0bksl-nlassert dernierepy-undoccurrence([2, 3, 5, 2, 4], 2) == 3bksl-nlbksl-nl
A
Le fait de renvoyer la longueur du tableau pour une cible non trouvée est discutable. Une bonne pratique est plutôt de renvoyer None
.
En commençant par la fin⚓︎
On s'arrête dès qu'on trouve la cible :
def derniere_occurrence(tableau, cible):
for i in range(len(tableau)-1, -1, -1):
if tableau[i] == cible:
return i
return len(tableau)
Autre façon de partir par la fin⚓︎
On incrémente la variable de boucle, mais on décrémente la position considérée.
def derniere_occurrence(tableau, cible):
n = len(tableau)
for indice in range(1, n + 1):
if tableau[n - indice] == cible:
return n - indice
return n
En renvoyant None
⚓︎
Ce code ne correspond pas à ce qui est demandé, mais il est intéressant.
def derniere_occurrence(tableau, cible):
for i in range(len(tableau)-1, -1, -1):
if tableau[i] == cible:
return i
- Si la cible n'est pas trouvée, on renvoie
None
. C'est une bonne idée ! - Commencer par la fin est plus logique pour obtenir une réponse rapide.
Z