Occurrences du minimum⚓︎
On dispose d'un tableau non vide donnees
d'entiers : les mesures d'un phénomène étudié.
Écrire une fonction telle que occurrences_mini(donnees)
renvoie un tuple composé de deux parties :
- la valeur minimale du phénomène étudié ;
- la liste des indices (rangés par ordre croissant) qui sont associés à la valeur minimale
On s'interdira d'utiliser
min
etindex
dans cet exercice.
Exemples
>>> donnees = [+13, +49, +13, +5]
>>> occurrences_mini(donnees)
(5, [3])
>>> donnees = [-84, +75, -84, 0, +16]
>>> occurrences_mini(donnees)
(-84, [0, 2])
def occurrencespy-undmini(donnees):bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nldonnees = [+13, +49, +13, +5]bksl-nlassert occurrencespy-undmini(donnees) == (5, [3])bksl-nlbksl-nldonnees = [-84, +75, -84, 0, +16]bksl-nlassert occurrencespy-undmini(donnees) == (-84, [0, 2])bksl-nlbksl-nldef occurrencespy-undmini(donnees):bksl-nl mini = donnees[0]bksl-nl indices = []bksl-nl for i in range(len(donnees)):bksl-nl valeur = donnees[i]bksl-nl if valeur == mini:bksl-nl indices.append(i)bksl-nl elif valeur < mini:bksl-nl mini = valeurbksl-nl indices = [i]bksl-nl return (mini, indices)bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nldonnees = [+13, +49, +13, +5]bksl-nlassert occurrencespy-undmini(donnees) == (5, [3])bksl-nlbksl-nldonnees = [-84, +75, -84, 0, +16]bksl-nlassert occurrencespy-undmini(donnees) == (-84, [0, 2])bksl-nlbksl-nl
A
Version fonctionnelle⚓︎
On pourrait écrire un code avec un style plus fonctionnel
def occurrences_mini(donnees):
mini = donnees[0]
indices = []
for i, valeur in enumerate(donnees):
if valeur == mini:
indices.append(i)
elif valeur < mini:
mini = valeur
indices = [i]
return (mini, indices)
enumerate
est utile lorsqu'on a besoin de l'indice et de la valeur.
Version décalée⚓︎
def occurrences_mini(donnees):
mini = donnees[0]
indices = [0]
for i in range(1, len(donnees)):
valeur = donnees[i]
if valeur == mini:
indices.append(i)
elif valeur < mini:
mini = valeur
indices = [i]
return (mini, indices)
On initialise indices
avec le premier élément, on peut alors commencer à l'indice 1, mais la traduction en fonctionnel est moins évidente... voire délicate.
Z