Aller au contenu

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 et index dans cet exercice.

Exemples
🐍 Console Python
>>> donnees = [+13, +49, +13, +5]
>>> occurrences_mini(donnees)
(5, [3])
🐍 Console Python
>>> donnees = [-84, +75, -84, 0, +16]
>>> occurrences_mini(donnees)
(-84, [0, 2])
###
# 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# autres testsbksl-nlbksl-nldonnees = [0] py-str 4 + [1] py-str 4bksl-nlattendu = (0, list(range(4)))bksl-nlassert occurrencespy-undmini(donnees) == attendu, f"Erreur avec {donnees}"bksl-nlbksl-nldonnees = [1] py-str 4 + [0] py-str 4bksl-nlattendu = (0, list(range(4, 8)))bksl-nlassert occurrencespy-undmini(donnees) == attendu, f"Erreur avec {donnees}"bksl-nlbksl-nldonnees = [10] py-str 3 + [-5] py-str 4 + [1] py-str 4bksl-nlattendu = (-5, list(range(3, 7)))bksl-nlassert occurrencespy-undmini(donnees) == attendu, f"Erreur avec {donnees}"bksl-nlbksl-nldonnees = [10] py-str 4 + [-5] py-str 4 + [1] py-str 3bksl-nlattendu = (-5, list(range(4, 8)))bksl-nlassert occurrencespy-undmini(donnees) == attendu, f"Erreur avec {donnees}"bksl-nlbksl-nl 5/5

def occurrencespy-undmini(donnees):bksl-nl ...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-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-nl

A

Version fonctionnelle⚓︎

On pourrait écrire un code avec un style plus fonctionnel

🐍 Script Python
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⚓︎

🐍 Script Python
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